【发布时间】:2015-06-22 03:12:55
【问题描述】:
我有一个带有双向通信的client - server - server socket 模拟。
我的线
recv(fd3, serv3_buf, BUFSIZE - 1, 0);
返回-1
如何使用errno.h 调试recv?
【问题讨论】:
-
linux/Mac Terminal使用gcc
我有一个带有双向通信的client - server - server socket 模拟。
我的线
recv(fd3, serv3_buf, BUFSIZE - 1, 0);
返回-1
如何使用errno.h 调试recv?
【问题讨论】:
linux/Mac Terminal 使用gcc
这是与recv相关的错误的手动解释!
错误 这些是套接字层产生的一些标准错误。添加- 可能会从底层原型生成和返回错误 col 模块;查看他们的手册页。
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.
当 recv 返回 -1 时,您可以使用 perror() 和 strerror() 来管理错误字符串。
解释见相关手册(手册):
【讨论】:
Socket operation on non-socket 回复了错误。我会进一步调查。