address_size = sizeof(c->sin);
c->fd = accept(service->fd, (struct sockaddr *)&service->sin, &address_size);
+
+ INFO("accepting '%s' connection from %i", service->name, c->sin.sin_port);
if ((retval = service->new_connection(c)) == ERROR_OK)
{
- INFO("accepted '%s' connection from %i", service->name, c->sin.sin_port);
}
else
{
close_socket(c->fd);
- INFO("attempted '%s' connection rejected", service->name);
+ ERROR("attempted '%s' connection rejected", service->name);
free(c);
+ return retval;
}
/* add to the end of linked list */
connection_t *c;
/* find connection */
- while(c = *p)
+ while((c = *p))
{
if (c->fd == connection->fd)
{
int remove_service(unsigned short port)
{
- service_t **p = services;
+ service_t **p = &services;
service_t *c;
/* find service */
- while(c = *p)
+ while((c = *p))
{
if (c->port == port)
{
FD_SET(fileno(stdin), &read_fds);
#endif
- if ((retval = select(fd_max + 1, &read_fds, NULL, NULL, &tv)) == -1)
+ retval = select(fd_max + 1, &read_fds, NULL, NULL, &tv);
+
+ if (retval == -1)
{
#ifdef _WIN32
#else
if (errno == EINTR)
+ {
FD_ZERO(&read_fds);
+ }
else
{
ERROR("error during select: %s", strerror(errno));
/* do regular tasks after at most 100ms */
tv.tv_sec = 0;
tv.tv_usec = 10000;
+ FD_ZERO(&read_fds); /* eCos leaves read_fds unchanged in this case! */
}
for (service = services; service; service = service->next)
&& (FD_ISSET(service->fd, &read_fds)))
{
if (service->max_connections > 0)
+ {
add_connection(service, command_context);
+ }
else
{
struct sockaddr_in sin;