accept
関数の後にこのようなコードを書きました
getpeername(rs,(struct sockaddr *)&clentaddr,&len);
それを印刷した後、クライアントアドレスは次のように表示されます0.0.0.0
私を助けてくれませんか
rs
にバインドされていると表示されている場合は、リスニングソケットである必要があります0.0.0.0
。によって返されたソケットで呼び出してみてくださいaccept()
。
accept()
accept()
の 2 番目のパラメータとして参照される構造体で、クライアントのアドレスを返します。
これは、エラーが発生しない場合にのみ実行されることが保証されているため、システム コールの戻り値を常にチェックすることをお勧めします。
int accept(int s,
struct sockaddr *addr,
int *addrlen);
上記の定義では、 addr は着信接続のアドレスを格納します
addr:-
The socket address of the connecting client that is filled in by accept
before it returns. The format of addr is determined by the domain in which
the client resides. This parameter can be NULL if the caller is not interested
in the address of the client. If the addr parameter is not NULL, it points to
a sockaddr structure.