* dtable.cc (dtable::dup2): Store fd for fhandler_socket.
* fhandler.h (fhandler_base::set_fd): New virtual method. (fhandler_base::get_fd): Ditto. (fhandler_socket::set_fd): Ditto. (fhandler_socket::get_fd): Ditto. * fhandler_socket.cc (fhandler_socket::read): Call cygwin_recv instead of native Winsock recv. (fhandler_socket::write): Call cygwin_send instead of native Winsock send. * net.cc (fdsock): Store fd in fhandler_socket.
This commit is contained in:
@ -251,27 +251,35 @@ fhandler_socket::fstat (struct stat *buf, path_conv *pc)
|
||||
return fh.fstat (buf, pc);
|
||||
}
|
||||
|
||||
extern "C" int cygwin_recv (int, void *, int, unsigned int);
|
||||
|
||||
int __stdcall
|
||||
fhandler_socket::read (void *ptr, size_t len)
|
||||
{
|
||||
sigframe thisframe (mainthread);
|
||||
int res = recv (get_socket (), (char *) ptr, len, 0);
|
||||
int res = cygwin_recv (get_fd (), (char *) ptr, len, 0);
|
||||
#if 0
|
||||
if (res == SOCKET_ERROR)
|
||||
set_winsock_errno ();
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
|
||||
extern "C" int cygwin_send (int, const void *, int, unsigned int);
|
||||
|
||||
int
|
||||
fhandler_socket::write (const void *ptr, size_t len)
|
||||
{
|
||||
sigframe thisframe (mainthread);
|
||||
int res = send (get_socket (), (const char *) ptr, len, 0);
|
||||
int res = cygwin_send (get_fd (), (const char *) ptr, len, 0);
|
||||
#if 0
|
||||
if (res == SOCKET_ERROR)
|
||||
{
|
||||
set_winsock_errno ();
|
||||
if (get_errno () == ECONNABORTED || get_errno () == ECONNRESET)
|
||||
_raise (SIGPIPE);
|
||||
}
|
||||
#endif
|
||||
return res;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user