Use SO_REUSEADDR to solve "socket in use" problem.
remove some more dead code.
This commit is contained in:
parent
eed6a20455
commit
6262b0e853
24
src/net.c
24
src/net.c
@ -15,7 +15,6 @@
|
||||
#include "net.h"
|
||||
#include "server.h"
|
||||
|
||||
#define MAX_CLIENTS 10
|
||||
#define SRV_FDS 1
|
||||
|
||||
struct client {
|
||||
@ -51,34 +50,31 @@ net_server(int port) {
|
||||
serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
serveraddr.sin_port = htons(port);
|
||||
|
||||
|
||||
servsock=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||
if (servsock<0)
|
||||
errx(1, "socket: %s\n", strerror(errno));
|
||||
int r;
|
||||
port--;
|
||||
do {
|
||||
serveraddr.sin_port = htons(++port);
|
||||
r=bind(servsock, (struct sockaddr *)&serveraddr, sizeof(serveraddr));
|
||||
} while ((r<0) && (errno==EADDRINUSE));
|
||||
if (r < 0)
|
||||
|
||||
int i=1;
|
||||
if (setsockopt(servsock, SOL_SOCKET, SO_REUSEADDR, &i, sizeof(i)) < 0)
|
||||
errx(1, "setsockopt SO_REUSEADDR: %s\n", strerror(errno));
|
||||
|
||||
if (bind(servsock, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0)
|
||||
errx(1, "bind port %d: %s\n", port, strerror(errno));
|
||||
|
||||
if (listen(servsock, 10) < 0)
|
||||
errx(1, "listen: %s\n", strerror(errno));
|
||||
|
||||
pollfds[0].fd=servsock;
|
||||
pollfds[0].events=POLLIN|POLLERR|POLLHUP;
|
||||
|
||||
for (int i=0; i<MAX_CLIENTS; i++) {
|
||||
pollfds[SRV_FDS+i].fd=-1;
|
||||
pollfds[SRV_FDS+i].events=0;
|
||||
}
|
||||
|
||||
printf("Waiting for connections on port %d...\n", port);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
net_all_flush() {
|
||||
}
|
||||
|
||||
void
|
||||
net_client_printf(int clientid, const char *fmt, ...) {
|
||||
va_list ap;
|
||||
|
Reference in New Issue
Block a user