Tidy up stupid signed/unsigned issues with win32 by introducing a php_socket_t typedef.

This commit is contained in:
Wez Furlong 2003-02-28 21:03:36 +00:00
parent 1ad304c2c5
commit 349ce76f96
7 changed files with 54 additions and 38 deletions

View file

@ -86,9 +86,9 @@ static int ftp_putcmd( ftpbuf_t *ftp,
const char *args); const char *args);
/* wrapper around send/recv to handle timeouts */ /* wrapper around send/recv to handle timeouts */
static int my_send(ftpbuf_t *ftp, int s, void *buf, size_t len); static int my_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len);
static int my_recv(ftpbuf_t *ftp, int s, void *buf, size_t len); static int my_recv(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len);
static int my_accept(ftpbuf_t *ftp, int s, struct sockaddr *addr, static int my_accept(ftpbuf_t *ftp, php_socket_t s, struct sockaddr *addr,
int *addrlen); int *addrlen);
/* reads a line the socket , returns true on success, false on error */ /* reads a line the socket , returns true on success, false on error */
@ -1173,7 +1173,7 @@ ftp_getresp(ftpbuf_t *ftp)
/* {{{ my_send /* {{{ my_send
*/ */
int int
my_send(ftpbuf_t *ftp, int s, void *buf, size_t len) my_send(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len)
{ {
fd_set write_set; fd_set write_set;
struct timeval tv; struct timeval tv;
@ -1225,7 +1225,7 @@ my_send(ftpbuf_t *ftp, int s, void *buf, size_t len)
/* {{{ my_recv /* {{{ my_recv
*/ */
int int
my_recv(ftpbuf_t *ftp, int s, void *buf, size_t len) my_recv(ftpbuf_t *ftp, php_socket_t s, void *buf, size_t len)
{ {
fd_set read_set; fd_set read_set;
struct timeval tv; struct timeval tv;
@ -1265,7 +1265,7 @@ my_recv(ftpbuf_t *ftp, int s, void *buf, size_t len)
/* {{{ data_available /* {{{ data_available
*/ */
int int
data_available(ftpbuf_t *ftp, int s) data_available(ftpbuf_t *ftp, php_socket_t s)
{ {
fd_set read_set; fd_set read_set;
struct timeval tv; struct timeval tv;
@ -1292,7 +1292,7 @@ data_available(ftpbuf_t *ftp, int s)
/* {{{ data_writeable /* {{{ data_writeable
*/ */
int int
data_writeable(ftpbuf_t *ftp, int s) data_writeable(ftpbuf_t *ftp, php_socket_t s)
{ {
fd_set write_set; fd_set write_set;
struct timeval tv; struct timeval tv;
@ -1320,7 +1320,7 @@ data_writeable(ftpbuf_t *ftp, int s)
/* {{{ my_accept /* {{{ my_accept
*/ */
int int
my_accept(ftpbuf_t *ftp, int s, struct sockaddr *addr, int *addrlen) my_accept(ftpbuf_t *ftp, php_socket_t s, struct sockaddr *addr, int *addrlen)
{ {
fd_set accept_set; fd_set accept_set;
struct timeval tv; struct timeval tv;

View file

@ -46,7 +46,7 @@ typedef enum ftptype {
typedef struct databuf typedef struct databuf
{ {
int listener; /* listener socket */ int listener; /* listener socket */
int fd; /* data connection */ php_socket_t fd; /* data connection */
ftptype_t type; /* transfer type */ ftptype_t type; /* transfer type */
char buf[FTP_BUFSIZE]; /* data buffer */ char buf[FTP_BUFSIZE]; /* data buffer */
#if HAVE_OPENSSL_EXT #if HAVE_OPENSSL_EXT
@ -57,7 +57,7 @@ typedef struct databuf
typedef struct ftpbuf typedef struct ftpbuf
{ {
int fd; /* control connection */ php_socket_t fd; /* control connection */
php_sockaddr_storage localaddr; /* local address */ php_sockaddr_storage localaddr; /* local address */
int resp; /* last response code */ int resp; /* last response code */
char inbuf[FTP_BUFSIZE]; /* last response text */ char inbuf[FTP_BUFSIZE]; /* last response text */

View file

@ -28,10 +28,13 @@
#include "ext/standard/basic_functions.h" #include "ext/standard/basic_functions.h"
#include "php_ini.h" #include "php_ini.h"
#include "streamsfuncs.h" #include "streamsfuncs.h"
#include "php_network.h"
#include "php_string.h"
#ifndef PHP_WIN32 #ifndef PHP_WIN32
#define php_select(m, r, w, e, t) select(m, r, w, e, t) #define php_select(m, r, w, e, t) select(m, r, w, e, t)
#else
#include "win32/select.h"
#endif #endif
static php_stream_context *decode_context_param(zval *contextresource TSRMLS_DC); static php_stream_context *decode_context_param(zval *contextresource TSRMLS_DC);
@ -342,11 +345,11 @@ PHP_FUNCTION(stream_get_wrappers)
/* }}} */ /* }}} */
/* {{{ stream_select related functions */ /* {{{ stream_select related functions */
static int stream_array_to_fd_set(zval *stream_array, fd_set *fds, int *max_fd TSRMLS_DC) static int stream_array_to_fd_set(zval *stream_array, fd_set *fds, php_socket_t *max_fd TSRMLS_DC)
{ {
zval **elem; zval **elem;
php_stream *stream; php_stream *stream;
int this_fd; php_socket_t this_fd;
if (Z_TYPE_P(stream_array) != IS_ARRAY) { if (Z_TYPE_P(stream_array) != IS_ARRAY) {
return 0; return 0;

View file

@ -280,7 +280,7 @@ typedef int php_non_blocking_flags_t;
* enable non-blocking mode on the socket. * enable non-blocking mode on the socket.
* */ * */
/* {{{ php_network_connect_socket */ /* {{{ php_network_connect_socket */
PHPAPI int php_network_connect_socket(int sockfd, PHPAPI int php_network_connect_socket(php_socket_t sockfd,
const struct sockaddr *addr, const struct sockaddr *addr,
socklen_t addrlen, socklen_t addrlen,
int asynchronous, int asynchronous,
@ -341,7 +341,7 @@ PHPAPI int php_network_connect_socket(int sockfd,
BSD-derived systems set errno correctly BSD-derived systems set errno correctly
Solaris returns -1 from getsockopt in case of error Solaris returns -1 from getsockopt in case of error
*/ */
if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (char*)&error, &len) < 0) {
ret = -1; ret = -1;
} }
} else { } else {
@ -393,11 +393,12 @@ static inline void sub_times(struct timeval a, struct timeval b, struct timeval
* Returns the bound socket, or -1 on failure. * Returns the bound socket, or -1 on failure.
* */ * */
/* {{{ php_network_bind_socket_to_local_addr */ /* {{{ php_network_bind_socket_to_local_addr */
int php_network_bind_socket_to_local_addr(const char *host, unsigned port, php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port,
int socktype, char **error_string, int *error_code int socktype, char **error_string, int *error_code
TSRMLS_DC) TSRMLS_DC)
{ {
int num_addrs, sock, n, err = 0; int num_addrs, n, err = 0;
php_socket_t sock;
struct sockaddr **sal, **psal, *sa; struct sockaddr **sal, **psal, *sa;
socklen_t socklen; socklen_t socklen;
@ -442,7 +443,7 @@ int php_network_bind_socket_to_local_addr(const char *host, unsigned port,
#ifdef SO_REUSEADDR #ifdef SO_REUSEADDR
{ {
int val = 1; int val = 1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &val, sizeof(val)); setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&val, sizeof(val));
} }
#endif #endif
@ -543,7 +544,7 @@ static void populate_name(
} }
} }
PHPAPI int php_network_get_peer_name(int sock, PHPAPI int php_network_get_peer_name(php_socket_t sock,
char **textaddr, long *textaddrlen, char **textaddr, long *textaddrlen,
struct sockaddr **addr, struct sockaddr **addr,
socklen_t *addrlen socklen_t *addrlen
@ -562,7 +563,7 @@ PHPAPI int php_network_get_peer_name(int sock,
return -1; return -1;
} }
PHPAPI int php_network_get_sock_name(int sock, PHPAPI int php_network_get_sock_name(php_socket_t sock,
char **textaddr, long *textaddrlen, char **textaddr, long *textaddrlen,
struct sockaddr **addr, struct sockaddr **addr,
socklen_t *addrlen socklen_t *addrlen
@ -592,7 +593,7 @@ PHPAPI int php_network_get_sock_name(int sock,
* */ * */
/* {{{ php_network_accept_incoming */ /* {{{ php_network_accept_incoming */
PHPAPI int php_network_accept_incoming(int srvsock, PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
char **textaddr, long *textaddrlen, char **textaddr, long *textaddrlen,
struct sockaddr **addr, struct sockaddr **addr,
socklen_t *addrlen, socklen_t *addrlen,
@ -601,7 +602,7 @@ PHPAPI int php_network_accept_incoming(int srvsock,
int *error_code int *error_code
TSRMLS_DC) TSRMLS_DC)
{ {
int clisock = -1; php_socket_t clisock = -1;
fd_set rset; fd_set rset;
int error, n; int error, n;
php_sockaddr_storage sa; php_sockaddr_storage sa;
@ -651,12 +652,13 @@ PHPAPI int php_network_accept_incoming(int srvsock,
* */ * */
/* {{{ php_network_connect_socket_to_host */ /* {{{ php_network_connect_socket_to_host */
int php_network_connect_socket_to_host(const char *host, unsigned short port, php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port,
int socktype, int asynchronous, struct timeval *timeout, char **error_string, int socktype, int asynchronous, struct timeval *timeout, char **error_string,
int *error_code int *error_code
TSRMLS_DC) TSRMLS_DC)
{ {
int num_addrs, sock, n, fatal = 0; int num_addrs, n, fatal = 0;
php_socket_t sock;
struct sockaddr **sal, **psal, *sa; struct sockaddr **sal, **psal, *sa;
struct timeval working_timeout; struct timeval working_timeout;
socklen_t socklen; socklen_t socklen;
@ -865,7 +867,7 @@ PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize)
/* }}} */ /* }}} */
/* deprecated */ /* deprecated */
PHPAPI php_stream *_php_stream_sock_open_from_socket(int socket, const char *persistent_id STREAMS_DC TSRMLS_DC) PHPAPI php_stream *_php_stream_sock_open_from_socket(php_socket_t socket, const char *persistent_id STREAMS_DC TSRMLS_DC)
{ {
php_stream *stream; php_stream *stream;
php_netstream_data_t *sock; php_netstream_data_t *sock;

View file

@ -80,6 +80,12 @@ PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize);
#include <stddef.h> #include <stddef.h>
#endif #endif
#ifdef PHP_WIN32
typedef SOCKET php_socket_t;
#else
typedef int php_socket_t;
#endif
#ifdef PHP_WIN32 #ifdef PHP_WIN32
# define SOCK_ERR INVALID_SOCKET # define SOCK_ERR INVALID_SOCKET
# define SOCK_CONN_ERR SOCKET_ERROR # define SOCK_CONN_ERR SOCKET_ERROR
@ -106,12 +112,12 @@ typedef struct {
} php_sockaddr_storage; } php_sockaddr_storage;
#endif #endif
PHPAPI int php_network_connect_socket_to_host(const char *host, unsigned short port, PHPAPI php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port,
int socktype, int asynchronous, struct timeval *timeout, char **error_string, int socktype, int asynchronous, struct timeval *timeout, char **error_string,
int *error_code int *error_code
TSRMLS_DC); TSRMLS_DC);
PHPAPI int php_network_connect_socket(int sockfd, PHPAPI int php_network_connect_socket(php_socket_t sockfd,
const struct sockaddr *addr, const struct sockaddr *addr,
socklen_t addrlen, socklen_t addrlen,
int asynchronous, int asynchronous,
@ -122,11 +128,11 @@ PHPAPI int php_network_connect_socket(int sockfd,
#define php_connect_nonb(sock, addr, addrlen, timeout) \ #define php_connect_nonb(sock, addr, addrlen, timeout) \
php_network_connect_socket((sock), (addr), (addrlen), 0, (timeout), NULL, NULL) php_network_connect_socket((sock), (addr), (addrlen), 0, (timeout), NULL, NULL)
PHPAPI int php_network_bind_socket_to_local_addr(const char *host, unsigned port, PHPAPI php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port,
int socktype, char **error_string, int *error_code int socktype, char **error_string, int *error_code
TSRMLS_DC); TSRMLS_DC);
PHPAPI int php_network_accept_incoming(int srvsock, PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock,
char **textaddr, long *textaddrlen, char **textaddr, long *textaddrlen,
struct sockaddr **addr, struct sockaddr **addr,
socklen_t *addrlen, socklen_t *addrlen,
@ -135,13 +141,13 @@ PHPAPI int php_network_accept_incoming(int srvsock,
int *error_code int *error_code
TSRMLS_DC); TSRMLS_DC);
PHPAPI int php_network_get_sock_name(int sock, PHPAPI int php_network_get_sock_name(php_socket_t sock,
char **textaddr, long *textaddrlen, char **textaddr, long *textaddrlen,
struct sockaddr **addr, struct sockaddr **addr,
socklen_t *addrlen socklen_t *addrlen
TSRMLS_DC); TSRMLS_DC);
PHPAPI int php_network_get_peer_name(int sock, PHPAPI int php_network_get_peer_name(php_socket_t sock,
char **textaddr, long *textaddrlen, char **textaddr, long *textaddrlen,
struct sockaddr **addr, struct sockaddr **addr,
socklen_t *addrlen socklen_t *addrlen
@ -150,8 +156,9 @@ PHPAPI int php_network_get_peer_name(int sock,
void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short port); void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short port);
int php_sockaddr_size(php_sockaddr_storage *addr); int php_sockaddr_size(php_sockaddr_storage *addr);
struct _php_netstream_data_t { struct _php_netstream_data_t {
int socket; php_socket_t socket;
char is_blocked; char is_blocked;
struct timeval timeout; struct timeval timeout;
char timeout_event; char timeout_event;
@ -162,7 +169,7 @@ extern php_stream_ops php_stream_socket_ops;
extern php_stream_ops php_stream_generic_socket_ops; extern php_stream_ops php_stream_generic_socket_ops;
#define PHP_STREAM_IS_SOCKET (&php_stream_socket_ops) #define PHP_STREAM_IS_SOCKET (&php_stream_socket_ops)
PHPAPI php_stream *_php_stream_sock_open_from_socket(int socket, const char *persistent_id STREAMS_DC TSRMLS_DC ); PHPAPI php_stream *_php_stream_sock_open_from_socket(php_socket_t socket, const char *persistent_id STREAMS_DC TSRMLS_DC );
/* open a connection to a host using php_hostconnect and return a stream */ /* open a connection to a host using php_hostconnect and return a stream */
PHPAPI php_stream *_php_stream_sock_open_host(const char *host, unsigned short port, PHPAPI php_stream *_php_stream_sock_open_host(const char *host, unsigned short port,
int socktype, struct timeval *timeout, const char *persistent_id STREAMS_DC TSRMLS_DC); int socktype, struct timeval *timeout, const char *persistent_id STREAMS_DC TSRMLS_DC);

View file

@ -422,7 +422,8 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
php_stream_xport_param *xparam TSRMLS_DC) php_stream_xport_param *xparam TSRMLS_DC)
{ {
char *host = NULL; char *host = NULL;
int portno, err; int portno;
int err;
int ret; int ret;
#ifdef AF_UNIX #ifdef AF_UNIX
@ -441,7 +442,7 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
parse_unix_address(xparam, &unix_addr TSRMLS_CC); parse_unix_address(xparam, &unix_addr TSRMLS_CC);
ret = php_network_connect_socket(sock->socket, ret = php_network_connect_socket(sock->socket,
(const struct sockaddr *)&unix_addr, sizeof(unix_addr), (const struct sockaddr *)&unix_addr, (socklen_t)sizeof(unix_addr),
xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC, xparam->inputs.timeout, xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC, xparam->inputs.timeout,
xparam->want_errortext ? &xparam->outputs.error_text : NULL, xparam->want_errortext ? &xparam->outputs.error_text : NULL,
&err); &err);
@ -465,7 +466,8 @@ static inline int php_tcp_sockop_connect(php_stream *stream, php_netstream_data_
sock->socket = php_network_connect_socket_to_host(host, portno, sock->socket = php_network_connect_socket_to_host(host, portno,
stream->ops == &php_stream_udp_socket_ops ? SOCK_DGRAM : SOCK_STREAM, stream->ops == &php_stream_udp_socket_ops ? SOCK_DGRAM : SOCK_STREAM,
xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC, xparam->op == STREAM_XPORT_OP_CONNECT_ASYNC,
xparam->inputs.timeout, xparam->want_errortext ? &xparam->outputs.error_text : NULL, xparam->inputs.timeout,
xparam->want_errortext ? &xparam->outputs.error_text : NULL,
&err &err
TSRMLS_CC); TSRMLS_CC);

View file

@ -17,6 +17,7 @@
*/ */
#include "php.h" #include "php.h"
#include "php_network.h"
/* $Id$ */ /* $Id$ */
@ -24,13 +25,14 @@
* get the OS file handle from regular fd's and sockets and then use WaitForMultipleObjects(). * get the OS file handle from regular fd's and sockets and then use WaitForMultipleObjects().
* This implementation is not as feature-full as posix select, but it works for our purposes * This implementation is not as feature-full as posix select, but it works for our purposes
*/ */
PHPAPI int php_select(int max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv) PHPAPI int php_select(php_socket_t max_fd, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *tv)
{ {
HANDLE *handles; HANDLE *handles;
DWORD waitret; DWORD waitret;
DWORD ms_total; DWORD ms_total;
int i, f, s, fd_count = 0, sock_count = 0; int f, s, fd_count = 0, sock_count = 0;
int retval; int retval;
php_socket_t i;
fd_set ard, awr, aex; /* active fd sets */ fd_set ard, awr, aex; /* active fd sets */
for (i = 0; i < max_fd; i++) { for (i = 0; i < max_fd; i++) {