Search code examples
csocketstcprecverrno

How to debug TCP recv()


I have a client - server - server socket simulation with bidirectional communication.

My line

recv(fd3, serv3_buf, BUFSIZE - 1, 0);

returns -1

How can you debug recv using errno.h?


Solution

  • Here is the man(ual) explanation of error relevants to 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.
    

    You may use perror() and strerror() to manage an error string when recv returns -1.

    See the relevant man(ual) for explanation:

    perror

    strerror