私のプログラムでは、libevent イベント ループで connfd の EV_READ イベントを登録します。このイベントがトリガーされるgetpeername
と、ピアの IP/PORT アドレスを取得するために使用します
socklen_t socklen;
struct sockaddr_in client_addr;
socklen = sizeof(client_addr);
retval = getpeername(connfd, (struct sockaddr *)&client_addr, &socklen);
if(retval == -1) perror("getpeername error!\n");
しかし時々、それは 0.0.0.0:0 を返します
そして、私はエラーがTransport endpoint is not connected
しかし、 recv(connfd,buf,..) は 1273 を返します。これは、1273 バイトを受信したことを意味します。接続が終了した場合、recv() はどのようにバイトを取得できますか? どのようにイベントをトリガーできますか?
ありがとう!