ssize_t win32_read_socket(SOCKET fd, void *buf, int n) { int rc = recv(fd, buf, n, 0); if(rc == SOCKET_ERROR) { set_socket_errno(WSAGetLastError()); } return rc; }
int win32_close_socket(SOCKET fd) { int rc = closesocket(fd); if(rc == SOCKET_ERROR) { set_socket_errno(WSAGetLastError()); } return rc; }
/* * A wrapper around the socket() function. The purpose of this wrapper * is to ensure that the global errno symbol is set if an error occurs, * even if we are using winsock. */ SOCKET win32_socket(int domain, int type, int protocol) { SOCKET fd = socket(domain, type, protocol); if(fd == INVALID_SOCKET) { set_socket_errno(WSAGetLastError()); } return fd; }
/* * A wrapper around the shutdown() function. The purpose of this wrapper * is to ensure that the global errno symbol is set if an error occurs, * even if we are using winsock. */ int win32_shutdown(SOCKET fd, int mode) { int rc = shutdown(fd, mode); assert(rc == 0 || rc == SOCKET_ERROR); if(rc == SOCKET_ERROR) { set_socket_errno(WSAGetLastError()); } return rc; }
/* * A wrapper around the accept() function. The purpose of this wrapper * is to ensure that the global errno symbol is set if an error occurs, * even if we are using winsock. */ SOCKET win32_accept(SOCKET fd, struct sockaddr *addr, socklen_t *addr_len) { SOCKET newfd = accept(fd, addr, addr_len); if(newfd == INVALID_SOCKET) { set_socket_errno(WSAGetLastError()); newfd = (SOCKET)-1; } return newfd; }
/*************************************************************** Connect a socket to an address ***************************************************************/ int fc_connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) { int result; result = connect(sockfd, serv_addr, addrlen); #ifdef HAVE_WINSOCK if (result == -1) { set_socket_errno(); } #endif /* HAVE_WINSOCK */ return result; }
/*************************************************************** Read from a socket. ***************************************************************/ int fc_readsocket(int sock, void *buf, size_t size) { int result; #ifdef HAVE_WINSOCK result = recv(sock, buf, size, 0); if (result == -1) { set_socket_errno(); } #else /* HAVE_WINSOCK */ result = read(sock, buf, size); #endif /* HAVE_WINSOCK */ return result; }
/*************************************************************** Wait for a number of sockets to change status **************************************************************/ int fc_select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { int result; result = select(n, readfds, writefds, exceptfds, timeout); #ifdef HAVE_WINSOCK if (result == -1) { set_socket_errno(); } #endif /* HAVE_WINSOCK */ return result; }
/*************************************************************** Write to a socket. ***************************************************************/ int fc_writesocket(int sock, const void *buf, size_t size) { int result; #ifdef HAVE_WINSOCK result = send(sock, buf, size, 0); if (result == -1) { set_socket_errno(); } #else /* HAVE_WINSOCK */ # ifdef MSG_NOSIGNAL result = send(sock, buf, size, MSG_NOSIGNAL); # else /* MSG_NOSIGNAL */ result = write(sock, buf, size); # endif /* MSG_NOSIGNAL */ #endif /* HAVE_WINSOCK */ return result; }