1,316
社区成员
发帖
与我相关
我的任务
分享
//server
void newConnection(int sockfd,const InetAddress &addr)
{
::write(sockfd, "how are you?\n", 13); //简单地回复一句话
}
int main()
{
EventLoop loop;
InetAddress listenAddr(12345);
Acceptor acceptor(&loop, listenAddr);
acceptor.setConnectionCallback(newConnection); //listenfd可读(新连接)调用回调
acceptor.listen(); //Accept::listen调用listenfd的listen
//while(true)循环,Acceptor构造时讲listenfd放进loop的epoll结构中,
//本循环检测到listenfd可读(新连接)之后调用accept得到connfd,然后调用上面set的回调函数
loop.loop();
}
//client
int main(int argc, char **argv)
{
struct sockaddr_in addr;
bzero(&addr, sizeof addr);
addr.sin_family = AF_INET;
addr.sin_port = htons(12345);
inet_pton(AF_INET, argv[1], &addr.sin_addr);
int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)); //连接server
char buf[256] = {'\0'};
read(sockfd, buf, sizeof(buf)); //接受msg
printf("Received: %s\n", buf);
close(sockfd);
return 0;
}
signal(SIGPIPE, SIG_IGN);//忽略SIGPIPE信号,否则可能会造成程序异常退出,增加响应的handler也可以
或者
status = send(hsock, (const char *)(sendbuf + sentbytes), sendlen - sentbytes,
#ifdef _WIN32
0
#else
MSG_DONTWAIT|
#ifdef __APPLE__
SO_NOSIGPIPE
#else
MSG_NOSIGNAL
#endif
#endif
);