1. ホーム

ソケット以外のエラーに対するソケット操作は、2つの方法で発生する可能性があります。

2022-02-15 06:10:13
例えば、call connect socket accept function error, can perror("socket"); perror("connect"); printf("%sn",strerror(errno)); can be typed errors 特定のエラー
select関数をもう一度: <0 : エラーリターン、=0: 正常、タイムアウトリターン、つまり、fdの読み書きができない、ノンブロッキングの場合のみ >0: 正常リターン、FDISSET関数を呼んでfdを調べることができる。 
非ソケットエラー時のソケット操作は、2つの方法で発生します。
      1. ソケットを作成します。
                 if(listenfd= socket(AF_INET,SOCK_STREAM, 0)==-1){.
                      perror("ソケットの作成に失敗しました!")。
                      exit(-1)を実行します。
                 }
           は、バインド時にソケット以外のソケット操作でエラーが発生します。
           正しいコードはこうです。
                  if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){.
                        perror("ソケットの作成に失敗しました!")。
                        exit(-1)を実行します。
                  }
      2.受理されたとき。
                 if(connfd=accept(listenfd,(struct sockaddr *)&client_addr,(socklen_t *)&sin_size)==-1){ ...
                      perror("accept error!");
                      exit(-1)です。
                 }
           は、recv時に非ソケットエラーでソケット操作を行います。
           正しいコードは
                 if((connfd=accept(listenfd,(struct sockaddr *)&client_addr,(socklen_t *)&sin_size))==-1){ (Listenfd,(struct sockaddr *)&sin_size))となります。
                         perror("accept error!");
                         exit(-1)です。
                 }
   Socket operation on non-socket エラーが発生するのは、以下の理由です。
            if(listenfd= socket(AF_INET,SOCK_STREAM, 0)==-1)

            if(connfd=accept(listenfd,(struct sockaddr *)&client_addr,(socklen_t *)&sin_size)==-1))。
   この2つの文章の()が抜けていることが原因です。割り当てが最も低い優先度に一致するため、listenfdとconnfdは、作成/接続が成功した場合は0、失敗した場合は1になる