Note that there are some explanatory texts on larger screens.

plurals
  1. POC sockets raises error code 22, EINVAL - invalid argument
    primarykey
    data
    text
    <p>The example code below works as as a server process. But when I add the line</p> <pre><code>pid_t childpid; </code></pre> <p>below</p> <pre><code>struct sockaddr_in servaddr, clientaddr; </code></pre> <p>it fails at line</p> <pre><code>connectfd = accept(listenfd, (struct sockaddr *) &amp;clientaddr, &amp;clientaddrlen); </code></pre> <p>with the error code 22, EINVAL - invalid argument. I'm new to sockets in C and I couldn't understand the problem, can you help me about this?</p> <p>Thanks.</p> <pre><code>#include &lt;stdio.h&gt; #include &lt;sys/types.h&gt; #include &lt;sys/socket.h&gt; #include &lt;linux/in.h&gt; #include &lt;stdlib.h&gt; #include &lt;unistd.h&gt; #include &lt;errno.h&gt; extern int errno; int main() { int clientaddrlen, listenfd, connectfd, bytes_rcvd, listen_queue_size=1; short int port_no = 2000; char buffer[1000]; struct sockaddr_in servaddr, clientaddr; printf("Server running at port #%d\n", port_no); // Create server socket. if ( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) &lt; 0) { fprintf(stderr, "Cannot create server socket! errno=%d \n", errno); exit(-1); } printf("Server socket created\n"); // Bind (attach) this process to the server socket. servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(port_no); bind(listenfd, (struct sockaddr *) &amp;servaddr, sizeof(servaddr)); printf("Server socket is bound to port #%d\n", port_no); // Turn 'listenfd' to a listening socket. Listen queue size is 1. listen(listenfd,listen_queue_size); printf("Server listening with a queue of size %d. \n", listen_queue_size); // Wait for connection(s) from client(s). while (1) { connectfd = accept(listenfd, (struct sockaddr *) &amp;clientaddr, &amp;clientaddrlen); printf("A client has connected\n"); if (recv(connectfd, buffer, sizeof(buffer), 0 ) &gt; 0) printf("Received message: %s\n", buffer); close(connectfd); printf("Server closed connection to client\n"); } close(listenfd); return 0; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload