/*server_daemon.c*/ include<stdio.h> ...省略... int GetLineFromPeer(char *line, int fd2) //仮引数にコネクト用のソケットディスクリプタfd2を追加 { ...省略... for(i = 0 ; ; ) { if(1 != read(fd2,line + i,1)) //client_daemonからの入力をよみこむために第一引数にfd2を指定 continue; ...省略... } } ...省略... int main() { char RecvBuff[256]; unsigned short port = 5683; //port番号 int fd1; //ソケット作成用ソケットディスクリプタ int fd2; //acdept用ソケットディスクリプタ struct sockaddr_in sin; struct sockaddr_in cin; int len; memset(&sin, 0, sizeof(sin)); if((fd1 = socket(AF_INET, SOCK_STREAM, 0)) < 0) //ソケットを作成 { perror("socket"); exit(1); } sin.sin_family = AF_INET; sin.sin_addr.s_addr = htons(INADDR_ANY); sin.sin_port = htons(port); //sockaddr構造体sinのメンバsin_portにポート番号をセット if(bind(fd1, (struct sockaddr *)&sin, sizeof(sin)) < 0) //ソケットにローカルアドレスを与える { perror("bind"); exit(1); } if(listen(fd1, 1) < 0) //ソケット上の接続を待つ { perror("listen"); exit(1); } len = sizeof(cin); if((fd2 = accept(fd1, (struct sockaddr *)&cin, &len) ) < 0) //client_daemonからの接続欲求を受け入れる { perror("accept"); exit(1); } for(;;) { ...省略... (void)GetLineFromPeer(RecvBuff, fd2); /*第二引数にソケットディスクリプタfd2を指定し、client_daemonからの入力を読み込む*/ ...省略... if((char *)NULL != (p = strchr(RecvBuff,'='))) { ...省略... (void)write(fd2,SendBuff,strlen(SendBuff)); //第一引数にfd2を指定し、client_daemonに応答する } } }