TCP ソケットを使用して通信する単純なクライアントおよびサーバー プログラムをセットアップしました。サーバーは、クライアントからのメッセージを受信したかどうかにかかわらず、クライアントが接続して応答するのを待ちます。以下は、サーバーとクライアントでのコードの実装方法です。
サーバー側のコード:
listen(sockfd,5);
clilen = sizeof(cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
error("ERROR on accept");
bzero(buffer,256);
n = read(newsockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("Here is the message: %s\n",buffer);
n = write(newsockfd,"I got your message",18);
if (n < 0)
error("ERROR writing to socket");
クライアント側のコード:
if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
else
printf("sucess. n = %d", n);
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
ここで、サーバーを起動してからクライアントを起動したとします。クライアントはサーバーに正常に接続します。次に、サーバーをシャットダウンし、クライアントからメッセージを送信しようとしましたが、write()
操作はエラーを返しません。ここで期待しているのは、サーバーが実際にパケットを受信しない (シャットダウンされている) ため、エラーです。
だから私の質問は: write()
(またはsend()
、sendto()
またはsendmsg()
) がメッセージをサーバーに正常に配信するかどうかを知る方法はありますか?