Linuxのソケットエラートランスポートエンドポイントがのrecvシャットダウンのタイミングをトリガするために接続されていません

1.recvトリガ

間違ったソケット、リスニングソケットとの接続ソケット誤用。例としては、次のとおりです:

for(;;){
        socklen_t len = sizeof(client_address);
        connfd = accept(listenfd, (struct sockaddr *)&client_address, &len);
        if(connfd < 0){
            printf("accept error: %s\n", strerror(errno));
        }
        printf("server get connection from %s\n", inet_ntop(AF_INET, &client_address.sin_addr, buff, sizeof(buff)));

        if((n = read(listenfd, message, 1024)) == -1){
            printf("read error: %s\n", strerror(errno));
            exit(1);
        }
        message[n] = '\0';
        printf("receive the message of client: %s\n", message);
        close(connfd);

    }

サーバー側とディスプレイの情報クライアントが上を通過するコード上記のクライアントリンク要求を受信すると、正常に生成新しいディスクリプタカーネルは()関数を読み取るためにそう呼び出した後、connfdに割り当てられている機能のリターンを受け入れ、最初のパラメータSHOULDそれは、代わりにlistenfd connfdされます。だから、コード行9は、読んでください

if((n = read(connfd, message, 1024)) == -1){ 

2.shutdownトリガ

場合は、クライアントソケットがサーバーソケットコールのシャットダウンは、このエラーが発生し、シャットダウンされました。

 

公開された57元の記事 ウォンの賞賛538 ビュー486万+

おすすめ

転載: blog.csdn.net/whatday/article/details/104056667