summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/fhandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/fhandler.h')
-rw-r--r--winsup/cygwin/fhandler.h39
1 files changed, 25 insertions, 14 deletions
diff --git a/winsup/cygwin/fhandler.h b/winsup/cygwin/fhandler.h
index 7b637c85a..6468560b3 100644
--- a/winsup/cygwin/fhandler.h
+++ b/winsup/cygwin/fhandler.h
@@ -378,6 +378,8 @@ class fhandler_mailslot : public fhandler_base
select_record *select_read (select_record *s);
};
+struct wsa_event;
+
class fhandler_socket: public fhandler_base
{
private:
@@ -385,6 +387,16 @@ class fhandler_socket: public fhandler_base
int type;
int connect_secret[4];
+ wsa_event *wsock_events;
+ HANDLE wsock_mtx;
+ public:
+ HANDLE wsock_evt;
+ bool init_events ();
+ int evaluate_events (const long event_mask, long &events, bool erase);
+ private:
+ int wait_for_events (const long event_mask);
+ void release_events ();
+
pid_t sec_pid;
__uid32_t sec_uid;
__gid32_t sec_gid;
@@ -414,20 +426,15 @@ class fhandler_socket: public fhandler_base
unsigned saw_shutdown_read : 1; /* Socket saw a SHUT_RD */
unsigned saw_shutdown_write : 1; /* Socket saw a SHUT_WR */
unsigned saw_reuseaddr : 1; /* Socket saw SO_REUSEADDR call */
- unsigned closed : 1;
- unsigned owner : 1;
+ unsigned listener : 1; /* listen called */
unsigned connect_state : 2;
public:
status_flags () :
async_io (0), saw_shutdown_read (0), saw_shutdown_write (0),
- closed (0), owner (0), connect_state (unconnected)
+ listener (0), connect_state (unconnected)
{}
} status;
- bool prepare (HANDLE &event, long event_mask);
- int wait (HANDLE event, int flags, DWORD timeout = 10);
- void release (HANDLE event);
-
public:
fhandler_socket ();
~fhandler_socket ();
@@ -438,8 +445,7 @@ class fhandler_socket: public fhandler_base
IMPLEMENT_STATUS_FLAG (bool, saw_shutdown_read)
IMPLEMENT_STATUS_FLAG (bool, saw_shutdown_write)
IMPLEMENT_STATUS_FLAG (bool, saw_reuseaddr)
- IMPLEMENT_STATUS_FLAG (bool, closed)
- IMPLEMENT_STATUS_FLAG (bool, owner)
+ IMPLEMENT_STATUS_FLAG (bool, listener)
IMPLEMENT_STATUS_FLAG (conn_state, connect_state)
int bind (const struct sockaddr *name, int namelen);
@@ -452,14 +458,19 @@ class fhandler_socket: public fhandler_base
int open (int flags, mode_t mode = 0);
ssize_t readv (const struct iovec *, int iovcnt, ssize_t tot = -1);
- int recvfrom (void *ptr, size_t len, int flags,
- struct sockaddr *from, int *fromlen);
- int recvmsg (struct msghdr *msg, int flags, ssize_t tot = -1);
+ inline ssize_t recv_internal (struct _WSABUF *wsabuf, DWORD wsacnt,
+ DWORD flags,
+ struct sockaddr *from, int *fromlen);
+ ssize_t recvfrom (void *ptr, size_t len, int flags,
+ struct sockaddr *from, int *fromlen);
+ ssize_t recvmsg (struct msghdr *msg, int flags, ssize_t tot = -1);
ssize_t writev (const struct iovec *, int iovcnt, ssize_t tot = -1);
- int sendto (const void *ptr, size_t len, int flags,
+ inline ssize_t send_internal (struct _WSABUF *wsabuf, DWORD wsacnt, int flags,
+ const struct sockaddr *to, int tolen);
+ ssize_t sendto (const void *ptr, size_t len, int flags,
const struct sockaddr *to, int tolen);
- int sendmsg (const struct msghdr *msg, int flags, ssize_t tot = -1);
+ ssize_t sendmsg (const struct msghdr *msg, int flags, ssize_t tot = -1);
int ioctl (unsigned int cmd, void *);
int fcntl (int cmd, void *);