aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYasuhiro Matsumoto <mattn.jp@gmail.com>2019-07-12 22:29:15 +0900
committerYasuhiro Matsumoto <mattn.jp@gmail.com>2019-07-12 22:29:15 +0900
commitc1ec4cdaf215f22c86040584cb1eef2b3ac2b741 (patch)
tree4716623f95844a09b94d5be36a72c06e720a0829
parentc1c13949a145803995a29c2b7d50cd58e8642128 (diff)
downloadvim-sonictemplate-c1ec4cdaf215f22c86040584cb1eef2b3ac2b741.tar.gz
vim-sonictemplate-c1ec4cdaf215f22c86040584cb1eef2b3ac2b741.tar.bz2
vim-sonictemplate-c1ec4cdaf215f22c86040584cb1eef2b3ac2b741.zip
Fix socket server
-rw-r--r--template/c/base-socket-server.c37
1 files 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 <ws2tcpip.h>
+# include <error.h>
+# include <stdio.h>
+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 <sys/fcntl.h>
# include <sys/types.h>
@@ -8,6 +22,7 @@
# include <netdb.h>
# include <stdio.h>
#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);