シンプルなクライアント/サーバー TCP 接続を作成しました。
サーバーがすでに実行されていて、クライアントが起動した後、すべてが正常に機能する場合。
問題クライアントがサーバーの前に起動する場合 -> クライアントは「Broken Pipe」で終了します
クライアントコード:
char *sUceTcpIP="127.0.0.1";
int isUceTcpPort=51515;
struct sockaddr_in dest;
memset(&dest, 0, sizeof(dest));
dest.sin_family = AF_INET;
dest.sin_addr.s_addr = inet_addr(sUceTcpIP);
dest.sin_port = htons(isUceTcpPort);
while ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) <= 0) ;
while (connect(sockfd,(struct sockaddr *) &dest,sizeof(dest)) < 0)
{ sleep(1); }
strcpy(buffer,"sometext");
send(sockfd,buffer,strlen(buffer)+1,0); <---- Broken Pipe
gdb バックトレースは、/64/libc.so の __so_send から呼び出されるシグナルを示しています
NON-Blockin、Linger、Reuse、Sleeps をクライアント/サーバーの両方に設定しようとしましたが、何も機能しません。
signal(SIGPIPE,SIG_IGN); も試しました。クライアント上
これは巨大なバグのようです。
ヘルプ/回避策はありますか?