-3

次のコードを検討してください。

iSocket = socket(PF_INET, SOCK_DGRAM, 0);
memset(&sSocketAddr, 0, sizeof(sSocketAddr));

sSocketAddr.sin_family = AF_INET;
sSocketAddr.sin_addr.s_addr = htonl(INADDR_ANY); 
sSocketAddr.sin_port = htons(10003);
Res = bind(iSocket, (struct sockaddr *)&sSocketAddr, sizeof(struct sockaddr_in));

上記のコードで bind は -1 を返します。しかし、それ以外のポート番号については、0 (エラーなし) を返します。UDP クライアントの要件に従って 10003 を使用する必要があります。これをどのように機能させることができますか?

4

1 に答える 1

4

バインドのマニュアル ページ ( http://linux.die.net/man/2/bind ) に記載されているとおり:

エラーの場合は -1 が返され、errno が適切に設定されます。

これはすべての POSIX 呼び出しの標準的な手順だと思います。実際のエラーの値を含む errno という名前の整数があります。その値を手動で確認するか、プリミティブを perror または strerror として使用できます ( http://www.beej.us/guide/bgnet/output/html/multipage/perrorman.html )

if (Res  == -1) { // some error has occurred
    // prints "socket error: " + the error message:
    perror("socket error");
}

あなたがしたいかもしれません#include<errno.h>(そしてstdio.h印刷機能のために)

于 2013-03-06T21:38:41.180 に答える