私はCで簡単なサーバ/クライアントプログラムを書いています。どこからでもアクセスできるIP上のポートを開こうとしています。現在、私のサーバは127.0.0.1
(ローカルマシン)と0.0.0.0
(わかりません)以外は何も動作しません。私はIP_TRANSPARENT
オプションを指定しましたが、クライアントを除くすべてのクライアントはまだconnect
で失敗します。外部IPへのconnect()が動作しない
サーバー:
// definitions, everything
struct addrinfo hints, *res;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("192.168.1.1","4001",&hints,&res);
sockfd = socket(res->ai_family,res->ai_socktype,res->ai_protocol);
setsockopt(sockfd,IPPROTO_IP,IP_TRANSPARENT,(void*)&sockopt,sizeof(sockopt));
bind(sockfd,res->ai_addr,res->ai_addrlen);
listen(sockfd,0);
addr_size = sizeof(ext_addr);
extfd = accept(sockfd,(struct sockaddr *)&ext_addr,&addr_size);
write(extfd,"Success",7);
// cleanup
クライアント:
// definitions, everything
struct sockaddr_in serv_addr;
sockfd = socket(AF_INET,SOCK_STREAM,0);
setsockopt(sockfd,IPPROTO_IP,IP_TRANSPARENT,(void*)&sockopt,sizeof(sockopt));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(4001);
inet_pton(AF_INET,"192.168.1.1",&serv_addr.sin_addr);
connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)); // fails here
read(sockfd,rcvBuf,sizeof(rcvBuf)-1);
// clean up
私の問題は何ですか?私は便宜のためにエラーチェックを取り出しました。サーバーは正常に動作しますが、私はそれを確信しています。クライアントは127.0.0.1で正常に動作します。
サーバのIPアドレスは192.168.1.1ですか? – immibis