- del234(localproxy_by_fromfd, ps);
- del234(localproxy_by_tofd, ps);
+ if (ps->to_cmd >= 0) {
+ del234(localproxy_by_tofd, ps);
+ uxsel_del(ps->to_cmd);
+ close(ps->to_cmd);
+ }
-static void sk_localproxy_flush (Socket s)
-{
- /* Local_Proxy_Socket ps = (Local_Proxy_Socket) s; */
- /* do nothing */
-}
-
-static void sk_localproxy_set_private_ptr (Socket s, void *ptr)
+static void sk_localproxy_write_eof (Socket s)
} else if (ret == 0) {
return plug_closing(s->plug, NULL, 0, 0);
} else {
} else if (ret == 0) {
return plug_closing(s->plug, NULL, 0, 0);
} else {
- return plug_receive(s->plug, 1, buf, ret);
+ return plug_receive(s->plug, 0, buf, ret);
Socket platform_new_connection(SockAddr addr, char *hostname,
int port, int privport,
int oobinline, int nodelay, int keepalive,
Socket platform_new_connection(SockAddr addr, char *hostname,
int port, int privport,
int oobinline, int nodelay, int keepalive,
sk_localproxy_set_frozen,
sk_localproxy_socket_error
};
sk_localproxy_set_frozen,
sk_localproxy_socket_error
};
if (pipe(to_cmd_pipe) < 0 ||
pipe(from_cmd_pipe) < 0) {
ret->error = dupprintf("pipe: %s", strerror(errno));
if (pipe(to_cmd_pipe) < 0 ||
pipe(from_cmd_pipe) < 0) {
ret->error = dupprintf("pipe: %s", strerror(errno));
- for (i = 3; i < 127; i++)
- close(i);
- fcntl(0, F_SETFD, 0);
- fcntl(1, F_SETFD, 0);
- execl("/bin/sh", "sh", "-c", cmd, NULL);
+ close(to_cmd_pipe[0]);
+ close(from_cmd_pipe[1]);
+ noncloexec(0);
+ noncloexec(1);
+ execl("/bin/sh", "sh", "-c", cmd, (void *)NULL);