BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #30617同步于 2009/10/30
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

有关socket accept()函数

molihua
2009/10/30镜像同步6 回复
请教哪位同学能否详细解释一下该函数: socket accept(socket s,struct sockaddr_*addr,int*addrlen)函数的每个参数及其返回值,我看了书可是仍不太明白
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
django机器人#1 · 2009/10/30
http://manpages.ubuntu.com/manpages/jaunty/man2/accept.2.html 【 在 molihua 的大作中提到: 】 : 请教哪位同学能否详细解释一下该函数: : socket accept(socket s,struct sockaddr_*addr,int*addrlen)函数的每个参数及其返回值,我看了书可是仍不太明白
wks机器人#2 · 2009/10/30
问男人阿
belinda机器人#3 · 2009/10/30
【 在 molihua 的大作中提到: 】 : 请教哪位同学能否详细解释一下该函数: : socket accept(socket s,struct sockaddr_*addr,int*addrlen)函数的每个参数及其返回值,我看了书可是仍不太明白 参数:socket s 是监听connect请求套接字描述符 sockaddr *addr 是用于存储客户端地址的缓冲区地址,accept前要分配足够的大小 int *addrlen是表示缓冲区地址大小的整数指针 返回值: 与客户端建立连接的套接字描述符
molihua机器人#4 · 2009/10/30
【 在 belinda 的大作中提到: 】 : 参数:socket s 是监听connect请求套接字描述符 : sockaddr *addr 是用于存储客户端地址的缓冲区地址,accept前要分配足够的大小 : int *addrlen是表示缓冲区地址大小的整数指针 : ................... 谢谢你呀,讲得很详细,我现在明白了
xinranlee机器人#5 · 2009/10/31
为什么要传指针呢?而且长度还一定要赋初值。 地址信息不是放在结构体里吗?为什么还要有缓冲区长度呢? 【 在 belinda 的大作中提到: 】 : 参数:socket s 是监听connect请求套接字描述符 : sockaddr *addr 是用于存储客户端地址的缓冲区地址,accept前要分配足够的大小 : int *addrlen是表示缓冲区地址大小的整数指针 : ...................
hobby机器人#6 · 2009/10/31
windows的msdn中说明如下,我觉得会看的很明白了吧 accept The Windows Sockets accept function accepts an incoming connection attempt on a socket. SOCKET accept ( SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen ); Parameters s [in] A descriptor identifying a socket that has been placed in a listening state with the listen function. The connection will actually be made with the socket that is returned by accept. addr [out] An optional pointer to a buffer that receives the address of the connecting entity, as known to the communications layer. The exact format of the addr parameter is determined by the address family established when the socket was created. addrlen [out] An optional pointer to an integer that contains the length of the address addr. Remarks The accept function extracts the first connection on the queue of pending connections on socket s. It then creates a new socket and returns a handle to the new socket. The newly created socket is the socket that will handle the actual the connection and has the same properties as socket s, including the asynchronous events registered with the WSAAsyncSelect or WSAEventSelect functions. The socket s does not have the listening socket's group ID, if any was applied. The accept function can block the caller until a connection is present if no pending connections are present on the queue, and the socket is marked as blocking. If the socket is marked nonblocking and no pending connections are present on the queue, accept returns an error as described below. After the successful completion of accept returns a new socket handle, the accepted socket cannot be used to accept more connections. The original socket remains open and listens for new connection requests. The parameter addr is a result parameter that is filled in with the address of the connecting entity, as known to the communications layer. The exact format of the addr parameter is determined by the address family in which the communication is occurring. The addrlen is a value-result parameter; it should initially contain the amount of space pointed to by addr; on return it will contain the actual length (in bytes) of the address returned. The accept function is used with connection-oriented socket types such as SOCK_STREAM. If addr and/or addrlen are equal to NULL, then no information about the remote address of the accepted socket is returned. Windows CE: Windows CE does not support the WSAEINTR error value. For IrSocket implementation, the addr and addrlen parameters should always be NULL. Return Values If no error occurs, accept returns a value of type SOCKET that is a descriptor for the new socket. This returned value is a handle for the socket on which the actual connection will be made. Otherwise, a value of INVALID_SOCKET is returned, and a specific error code can be retrieved by calling WSAGetLastError. The integer referred to by addrlen initially contains the amount of space pointed to by addr. On return it will contain the actual length in bytes of the address returned. Error Codes WSANOTINITIALISED A successful WSAStartup must occur before using this FUNCTION. WSAENETDOWN The network subsystem has failed. WSAEFAULT The addrlen parameter is too small or addr is not a valid part of the user address space. WSAEINTR A blocking Windows Sockets 1.1 call was canceled through WSACancelBlockingCall. WSAEINPROGRESS A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function. WSAEINVAL The listen function was not invoked prior to accept. WSAEMFILE The queue is nonempty upon entry to accept and there are no descriptors available. WSAENOBUFS No buffer space is available. WSAENOTSOCK The descriptor is not a socket. WSAEOPNOTSUPP The referenced socket is not a type that supports connection-oriented service. WSAEWOULDBLOCK The socket is marked as nonblocking and no connections are present to be accepted. QuickInfo Windows NT: Yes Windows: Yes Windows CE: Use version 1.0 and later. Header: Declared in winsock2.h. Import Library: Link with ws2_32.lib.