]> git.sur5r.net Git - openocd/commitdiff
Spen fixed various issues w.r.t. setting up the sockets for optimal performance.
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 7 Apr 2008 17:29:21 +0000 (17:29 +0000)
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Mon, 7 Apr 2008 17:29:21 +0000 (17:29 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@545 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/server/gdb_server.c
src/server/server.c

index 6ac9364d8a10047deac5653b9b6b0464b54b08b8..9a5b81a49360d19e188c7931460a734b79bd40af 100644 (file)
@@ -90,7 +90,6 @@ int gdb_last_signal(target_t *target)
        }
 }
 
-#ifndef _WIN32
 int check_pending(connection_t *connection, int timeout_s, int *got_data)
 {
        /* a non-blocking socket will block if there is 0 bytes available on the socket,
@@ -131,7 +130,6 @@ int check_pending(connection_t *connection, int timeout_s, int *got_data)
        *got_data=FD_ISSET(connection->fd, &read_fds)!=0;
        return ERROR_OK;
 }
-#endif
 
 int gdb_get_char(connection_t *connection, int* next_char)
 {
@@ -159,11 +157,9 @@ int gdb_get_char(connection_t *connection, int* next_char)
 
        for (;;)
        {
-#ifndef _WIN32
                retval=check_pending(connection, 1, NULL);
                if (retval!=ERROR_OK)
                        return retval;
-#endif
                gdb_con->buf_cnt = read_socket(connection->fd, gdb_con->buffer, GDB_BUFFER_SIZE);
                if (gdb_con->buf_cnt > 0)
                {
index 33bf00cf218907256daa8b962ae5ab0c8aa9fc2f..21a8ebabaa1827e06f3356041cd713348e185981 100644 (file)
@@ -52,9 +52,7 @@ int add_connection(service_t *service, command_context_t *cmd_ctx)
        unsigned int address_size;
        connection_t *c, **p;
        int retval;
-#ifndef _WIN32
        int flag=1;
-#endif
        
        c = malloc(sizeof(connection_t));
        c->fd = -1;
@@ -66,34 +64,17 @@ int add_connection(service_t *service, command_context_t *cmd_ctx)
        c->next = NULL;
 
        address_size = sizeof(c->sin);
-#ifndef _WIN32
-       int segsize=65536;
-       setsockopt(service->fd, IPPROTO_TCP, TCP_MAXSEG,  &segsize, sizeof(int));
-       int window_size = 128 * 1024;   
-
-       /* These setsockopt()s must happen before the accept() */
-
-       setsockopt(service->fd, SOL_SOCKET, SO_SNDBUF,
-                (char *) &window_size, sizeof(window_size));
-
-       setsockopt(service->fd, SOL_SOCKET, SO_RCVBUF,
-                (char *) &window_size, sizeof(window_size));
        
-#endif
        c->fd = accept(service->fd, (struct sockaddr *)&service->sin, &address_size);
-#ifndef _WIN32
-       // This increases performance dramatically for e.g. GDB load which
-       // does not have a sliding window protocol.
-    retval=setsockopt(c->fd,            /* socket affected */
-                            IPPROTO_TCP,     /* set option at TCP level */
-                            TCP_NODELAY,     /* name of option */
-                            (char *) &flag,  /* the cast is historical
-                                                    cruft */
-                            sizeof(int));    /* length of option value */
-    setsockopt(c->fd, IPPROTO_TCP, TCP_MAXSEG,  &segsize, sizeof(int));
-#endif 
-                               
-                               
+       
+       /* This increases performance dramatically for e.g. GDB load which
+        * does not have a sliding window protocol. */
+       retval=setsockopt(c->fd,        /* socket affected */
+                       IPPROTO_TCP,            /* set option at TCP level */
+                       TCP_NODELAY,            /* name of option */
+                       (char *)&flag,          /* the cast is historical cruft */
+                       sizeof(int));           /* length of option value */
+               
        LOG_INFO("accepting '%s' connection from %i", service->name, c->sin.sin_port);
        if ((retval = service->new_connection(c)) == ERROR_OK)
        {
@@ -184,6 +165,19 @@ int add_service(char *name, enum connection_type type, unsigned short port, int
                exit(-1);
        }
        
+#ifndef _WIN32
+       int segsize=65536;
+       setsockopt(c->fd, IPPROTO_TCP, TCP_MAXSEG,  &segsize, sizeof(int));
+#endif
+       int window_size = 128 * 1024;   
+
+       /* These setsockopt()s must happen before the listen() */
+       
+       setsockopt(c->fd, SOL_SOCKET, SO_SNDBUF,
+               (char *)&window_size, sizeof(window_size));
+       setsockopt(c->fd, SOL_SOCKET, SO_RCVBUF,
+               (char *)&window_size, sizeof(window_size));
+       
        if (listen(c->fd, 1) == -1)
        {
                LOG_ERROR("couldn't listen on socket: %s", strerror(errno));