From c1ec4cdaf215f22c86040584cb1eef2b3ac2b741 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Fri, 12 Jul 2019 22:29:15 +0900 Subject: Fix socket server --- template/c/base-socket-server.c | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/template/c/base-socket-server.c b/template/c/base-socket-server.c index 4fed22e..5e41e40 100644 --- a/template/c/base-socket-server.c +++ b/template/c/base-socket-server.c @@ -1,5 +1,19 @@ #ifdef _WIN32 # include +# include +# include +static void +socket_perror(const char *s) { + CHAR buf[512]; + FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, + NULL, + WSAGetLastError(), + 0, + buf, + sizeof(buf)/sizeof(buf[0]), + NULL); + printf("%s: %s", s, buf); +} #else # include # include @@ -8,6 +22,7 @@ # include # include #define closesocket(fd) close(fd) +#define socket_perror(s) perror(s) #endif int @@ -23,35 +38,35 @@ main(int argc, char* argv[]) { WSAStartup(MAKEWORD(2, 0), &wsa); #endif - if ((server_fd = socket(PF_INET, SOCK_STREAM, 0)) < 0) { - perror("reader: socket"); + if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { + socket_perror("reader: socket"); exit(1); } memset((char *) &reader_addr, 0, sizeof(reader_addr)); reader_addr.sin_family = PF_INET; reader_addr.sin_addr.s_addr = htonl(INADDR_ANY); - //reader_addr.sin_port = htons(8000); - reader_addr.sin_port = 0; + reader_addr.sin_port = htons(8000); if (bind(server_fd, (struct sockaddr *)&reader_addr, sizeof(reader_addr)) < 0) { - perror("reader: bind"); + socket_perror("reader: bind"); exit(1); } - size_t socklen = sizeof(reader_addr); + socklen_t socklen = sizeof(reader_addr); if (getsockname(server_fd, (struct sockaddr *)&reader_addr, &socklen) < 0) { - perror("reader: bind"); + socket_perror("getsockname: bind"); exit(1); } if (listen(server_fd, 5) < 0) { - perror("reader: listen"); - close(server_fd); + socket_perror("reader: listen"); + closesocket(server_fd); exit(1); } + writer_len = sizeof(writer_addr); if ((client_fd = accept(server_fd,(struct sockaddr *)&writer_addr, &writer_len)) < 0) { - perror("reader: accept"); + socket_perror("reader: accept"); exit(1); } @@ -62,7 +77,7 @@ main(int argc, char* argv[]) { if (n == 0) { break; } else if (n == -1) { - perror("recv"); + socket_perror("recv"); exit(EXIT_FAILURE); } else { send(client_fd, buf, n, 0); -- cgit v1.2.3-54-g00ecf