Small fixes to get really working control sockets on Windows.
authorGuus Sliepen <guus@sliepen.eu.org>
Sat, 7 Nov 2009 15:09:56 +0000 (16:09 +0100)
committerGuus Sliepen <guus@sliepen.eu.org>
Sat, 7 Nov 2009 15:09:56 +0000 (16:09 +0100)
src/control.c
src/tincctl.c

index 8493f254fe3e7a5287083432412f92a355d54936..b62e1439744d3a651dbad6310434c1fbda1f008d 100644 (file)
@@ -217,8 +217,15 @@ bool init_control() {
        addr.sin_family = AF_INET;
        addr.sin_addr.s_addr = htonl(0x7f000001);
        addr.sin_port = htons(55555);
+       int option = 1;
 
        control_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+       if(control_socket < 0) {
+               logger(LOG_ERR, "Creating control socket failed: %s", sockstrerror(sockerrno));
+               goto bail;
+       }
+
+       setsockopt(control_socket, SOL_SOCKET, SO_REUSEADDR, &option, sizeof option);
 #else
        struct sockaddr_un addr;
        char *lastslash;
@@ -275,8 +282,8 @@ bool init_control() {
        result = bind(control_socket, (struct sockaddr *)&addr, sizeof addr);
 
        if(result < 0 && sockinuse(sockerrno)) {
-               result = connect(control_socket, (struct sockaddr *)&addr, sizeof addr);
 #ifndef HAVE_MINGW
+               result = connect(control_socket, (struct sockaddr *)&addr, sizeof addr);
                if(result < 0) {
                        logger(LOG_WARNING, "Removing old control socket.");
                        unlink(controlsocketname);
index 7d82dc442037329ac9bdb1080e897da48196e541..784c6a94759abe3e8b3a3c9e1303729f163c450b 100644 (file)
@@ -296,7 +296,7 @@ static int fullread(int fd, void *data, size_t datalen) {
        int rv, len = 0;
 
        while(len < datalen) {
-               rv = read(fd, data + len, datalen - len);
+               rv = recv(fd, data + len, datalen - len, 0);
                if(rv == -1 && errno == EINTR)
                        continue;
                else if(rv == -1)
@@ -478,8 +478,6 @@ int main(int argc, char *argv[], char *envp[]) {
                return 1;
        }
 
-       fprintf(stderr, "Got socket %d\n", fd);
-
        unsigned long arg = 0;
 
        if(ioctlsocket(fd, FIONBIO, &arg) != 0) {
@@ -529,8 +527,6 @@ int main(int argc, char *argv[], char *envp[]) {
                return 1;
        }
 
-       fprintf(stderr, "Connected!\n");
-
        if(fullread(fd, &greeting, sizeof greeting) == -1) {
                fprintf(stderr, "Cannot read greeting from control socket: %s\n",
                                sockstrerror(sockerrno));