クライアントをサーバーに接続しようとすると、無効な引数エラーが発生し続けます。オンラインのいくつかのスレッドは、addrlenが正しくない場合にこれが発生する可能性があると述べましたが、長さを数えた後でリテラル値に変更しようとしましたが、機能しませんでした。また、strlen()だけを試しましたが運がありませんでした。とにかく、関連するコード-
サーバー-
struct sockaddr name;
int main(int agrc, char** argv) {
int sock, new_sd, adrlen; //sock is this socket, new_sd is connection socket
name.sa_family = AF_INET;
strcpy(name.sa_data, "127.0.0.1");
adrlen = strlen(name.sa_data) + sizeof(name.sa_family);
//make socket
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("\nBind error %m", errno);
exit(1);
}
//unlink and bind
unlink("127.0.0.1");
if(bind (sock, &name, adrlen) < 0)
printf("\nBind error %m", errno);
//listen
if(listen(sock, 5) < 0)
printf("\nListen error %m", errno);
//accept
new_sd = accept(sock, &name, (socklen_t*)&adrlen);
if( new_sd < 0) {
printf("\nAccept error %m", errno);
exit(1);
}
クライアント -
int main(int agrc, char** argv) {
int sock, new_sd, adrlen;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
printf("\nserver socket failure %m", errno);
exit(1);
}
//stuff for server socket
name.sa_family = AF_INET;
strcpy(name.sa_data, "127.0.0.1");
adrlen = strlen(name.sa_data) + sizeof(name.sa_family);
cout<<"\nadrlen: "<<adrlen<<"\n";
if(connect(sock, &name, adrlen) < 0) {
printf("\nclient connection failure %m", errno);
exit(1);
}
間違っている可能性のあるものは何も見当たりませんが、何かを見落としているか、何かに気付いていない可能性があります。どんな助けでも大歓迎です。