如何调试 TCP recv()
How to debug TCP recv()
我有一个 client - server - server socket
双向通信模拟。
我的线路
recv(fd3, serv3_buf, BUFSIZE - 1, 0);
returns -1
如何使用 errno.h
调试 recv
?
这里是recv相关错误的人工解释!
ERRORS
These are some standard errors generated by the socket layer. Addi‐
tional errors may be generated and returned from the underlying proto‐
col modules; see their manual pages.
EAGAIN or EWOULDBLOCK
The socket is marked nonblocking and the receive operation would
block, or a receive timeout had been set and the timeout expired
before data was received. POSIX.1-2001 allows either error to
be returned for this case, and does not require these constants
to have the same value, so a portable application should check
for both possibilities.
EBADF The argument sockfd is an invalid descriptor.
ECONNREFUSED
A remote host refused to allow the network connection (typically
because it is not running the requested service).
EFAULT The receive buffer pointer(s) point outside the process's
address space.
EINTR The receive was interrupted by delivery of a signal before any
data were available; see signal(7).
EINVAL Invalid argument passed.
ENOMEM Could not allocate memory for recvmsg().
ENOTCONN
The socket is associated with a connection-oriented protocol and
has not been connected (see connect(2) and accept(2)).
ENOTSOCK
The argument sockfd does not refer to a socket.
您可以使用 perror() 和 strerror() 来管理 recv returns -1 时的错误字符串。
见相关man(ual)解释:
我有一个 client - server - server socket
双向通信模拟。
我的线路
recv(fd3, serv3_buf, BUFSIZE - 1, 0);
returns -1
如何使用 errno.h
调试 recv
?
这里是recv相关错误的人工解释!
ERRORS These are some standard errors generated by the socket layer. Addi‐ tional errors may be generated and returned from the underlying proto‐ col modules; see their manual pages.
EAGAIN or EWOULDBLOCK The socket is marked nonblocking and the receive operation would block, or a receive timeout had been set and the timeout expired before data was received. POSIX.1-2001 allows either error to be returned for this case, and does not require these constants to have the same value, so a portable application should check for both possibilities. EBADF The argument sockfd is an invalid descriptor. ECONNREFUSED A remote host refused to allow the network connection (typically because it is not running the requested service). EFAULT The receive buffer pointer(s) point outside the process's address space. EINTR The receive was interrupted by delivery of a signal before any data were available; see signal(7). EINVAL Invalid argument passed. ENOMEM Could not allocate memory for recvmsg(). ENOTCONN The socket is associated with a connection-oriented protocol and has not been connected (see connect(2) and accept(2)). ENOTSOCK The argument sockfd does not refer to a socket.
您可以使用 perror() 和 strerror() 来管理 recv returns -1 时的错误字符串。
见相关man(ual)解释: