summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-04-07 17:29:21 +0000
committeroharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>2008-04-07 17:29:21 +0000
commit0d4f8fc824c1d07cf385b13483f703456322d4ae (patch)
tree2284a551df71b27f94e94e535695a2eee23d8ebf
parent2b7504c27947a139473986fa65d977701addb88d (diff)
downloadopenocd_libswd-0d4f8fc824c1d07cf385b13483f703456322d4ae.tar.gz
openocd_libswd-0d4f8fc824c1d07cf385b13483f703456322d4ae.tar.bz2
openocd_libswd-0d4f8fc824c1d07cf385b13483f703456322d4ae.tar.xz
openocd_libswd-0d4f8fc824c1d07cf385b13483f703456322d4ae.zip
Spen fixed various issues w.r.t. setting up the sockets for optimal performance.
git-svn-id: svn://svn.berlios.de/openocd/trunk@545 b42882b7-edfa-0310-969c-e2dbd0fdcd60
-rw-r--r--src/server/gdb_server.c4
-rw-r--r--src/server/server.c50
2 files changed, 22 insertions, 32 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 6ac9364d..9a5b81a4 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -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)
{
diff --git a/src/server/server.c b/src/server/server.c
index 33bf00cf..21a8ebab 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -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));