【问题标题】:How to debug TCP recv()如何调试 TCP recv()
【发布时间】: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

标签: c sockets tcp recv errno


【解决方案1】:

这是与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() 来管理错误字符串。

解释见相关手册(手册):

perror

strerror

【讨论】:

  • 谢谢。我在搜索中看到了这些信息,但我不确定如何合并显示这些错误
  • 我用 perror Socket operation on non-socket 回复了错误。我会进一步调查。
  • 我认为这意味着 fd3(在帖子中指您的代码行)包含无效的套接字值或初始化!您必须验证生成它的 socket() 函数是否没有返回 -1。如果调用 socket() 函数时返回 -1,则必须验证 errno 等。-
猜你喜欢
  • 2018-12-18
  • 2011-07-09
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 2015-03-09
  • 2013-04-03
相关资源
最近更新 更多