+void *job_run(void *_fd)
+{
+ int fd = (intptr_t)_fd;
+
+ close(fd);
+ return NULL;
+}
+
+static void main_loop(void)
+{
+ int sock = -1;
+
+ while (!sigint) {
+ int fd = accept(sock, NULL, 0);
+ pthread_attr_t attr;
+ pthread_t dummy;
+
+ if (fd < 0) {
+ if (errno != EINTR || errno != EAGAIN)
+ UNIXERR("accept");
+ continue;
+ }
+
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ pthread_create(&dummy, &attr, job_run, (void *)(intptr_t)fd);
+ pthread_attr_destroy(&attr);
+ }
+
+ cleanexit = true;
+ close(sock);
+}
+