unsigned int address_size;
connection_t *c, **p;
int retval;
-#ifndef _WIN32
int flag=1;
-#endif
c = malloc(sizeof(connection_t));
c->fd = -1;
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)
{
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));
return ERROR_OK;
}
-extern void lockBigLock();
-extern void unlockBigLock();
+extern void openocd_sleep_prelude();
+extern void openocd_sleep_postlude();
int server_loop(command_context_t *command_context)
{
LOG_ERROR("couldn't set SIGPIPE to SIG_IGN");
#endif
- // This function is reentrant(workaround for configuration problems)
- static int lockCount=0;
- if (lockCount++==0)
- {
- lockBigLock();
- }
-
/* do regular tasks after at most 10ms */
tv.tv_sec = 0;
tv.tv_usec = 10000;
#endif
#endif
+ openocd_sleep_prelude();
+ kept_alive();
// Only while we're sleeping we'll let others run
- unlockBigLock();
retval = select(fd_max + 1, &read_fds, NULL, NULL, &tv);
- lockBigLock();
+ openocd_sleep_postlude();
if (retval == -1)
{
}
#endif
}
- if (--lockCount==0)
- {
- unlockBigLock();
- }
return ERROR_OK;
}