📄 php_sockets_win.c
字号:
/* +----------------------------------------------------------------------+ | PHP Version 4 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2007 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> | | Sterling Hughes <sterling@php.net> | | | | WinSock: Daniel Beulshausen <daniel@php4win.de> | +----------------------------------------------------------------------+ *//* $Id: php_sockets_win.c,v 1.5.4.3.4.2 2007/01/01 09:46:47 sebastian Exp $ */#ifdef PHP_WIN32#include <stdio.h>#include <fcntl.h>#include "php.h"#include "php_sockets.h"#include "php_sockets_win.h"ssize_t readv(SOCKET sock, const struct iovec *iov, int iovcnt) { size_t bytes, remain, len, pos = 0; ssize_t retval; int i; char *buffer = NULL; for(bytes=0, i=0; i<iovcnt; i++) { bytes += iov[i].iov_len; } buffer = (char*)emalloc(bytes); if (buffer == NULL) { return -1; } retval = recv(sock, buffer, bytes, 0); if(retval < 0) { efree(buffer); return retval; } remain = bytes = (size_t) retval; for(i=0; i<iovcnt; i++) { len = ((unsigned int)iov[i].iov_len < remain) ? iov[i].iov_len : remain; memcpy(iov[i].iov_base, buffer+pos, len); pos += len; remain -= len; } efree(buffer); return bytes;}ssize_t writev(SOCKET sock, const struct iovec *iov, int iovcnt) { size_t bytes, pos = 0; ssize_t retval; int i; char *buffer = NULL; for(bytes=0, i=0; i<iovcnt; i++) { bytes += iov[i].iov_len; } buffer = (char*)emalloc(bytes); if(buffer == NULL) { return -1; } for(i=0; i<iovcnt; i++) { memcpy(buffer+pos, iov[i].iov_base, iov[i].iov_len); pos += iov[i].iov_len; } retval = send(sock, buffer, bytes, 0); efree(buffer); return retval;}ssize_t recvmsg(SOCKET sock, struct msghdr *msg, int flags) { set_errno(WSAEOPNOTSUPP); return -1;}ssize_t sendmsg(SOCKET sock, struct msghdr *msg, int flags) { set_errno(WSAEOPNOTSUPP); return -1;}int socketpair(int domain, int type, int protocol, SOCKET sock[2]) { struct sockaddr_in address; SOCKET redirect; int size = sizeof(address); if(domain != AF_INET) { set_errno(WSAENOPROTOOPT); return -1; } sock[0] = socket(domain, type, protocol); address.sin_addr.s_addr = INADDR_ANY; address.sin_family = AF_INET; address.sin_port = 0; bind(sock[0], (struct sockaddr*)&address, sizeof(address)); if(getsockname(sock[0], (struct sockaddr *)&address, &size) != 0) { } listen(sock[0], 2); sock[1] = socket(domain, type, protocol); address.sin_addr.s_addr = htonl(INADDR_LOOPBACK); connect(sock[1], (struct sockaddr*)&address, sizeof(address)); redirect = accept(sock[0],(struct sockaddr*)&address, &size); close(sock[0]); sock[0] = redirect; if(sock[0] == INVALID_SOCKET ) { close(sock[0]); close(sock[1]); set_errno(WSAECONNABORTED); return -1; } return 0;}int inet_aton(const char *cp, struct in_addr *inp) { inp->s_addr = inet_addr(cp); if (inp->s_addr == INADDR_NONE) { return 0; } return 1;}int fcntl(int fd, int cmd, ...) { va_list va; int retval, io, mode; va_start(va, cmd); switch(cmd) { case F_GETFL: case F_SETFD: case F_GETFD: default: retval = -1; break; case F_SETFL: io = va_arg(va, int); mode = io == O_NONBLOCK ? 1 : 0; retval = ioctlsocket(fd, io, &mode); break; } va_end(va); return retval;}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -