Annotation of embedaddon/php/win32/sockets.c, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 The PHP Group |
! 6: +----------------------------------------------------------------------+
! 7: | This source file is subject to version 3.01 of the PHP license, |
! 8: | that is bundled with this package in the file LICENSE, and is |
! 9: | available through the world-wide-web at the following url: |
! 10: | http://www.php.net/license/3_01.txt |
! 11: | If you did not receive a copy of the PHP license and are unable to |
! 12: | obtain it through the world-wide-web, please send a note to |
! 13: | license@php.net so we can mail you a copy immediately. |
! 14: +----------------------------------------------------------------------+
! 15: | Authors: Chris Vandomelen <chrisv@b0rked.dhs.org> |
! 16: | Sterling Hughes <sterling@php.net> |
! 17: | |
! 18: | WinSock: Daniel Beulshausen <daniel@php4win.de> |
! 19: +----------------------------------------------------------------------+
! 20: */
! 21:
! 22: /* $Id: sockets.c 321634 2012-01-01 13:15:04Z felipe $ */
! 23:
! 24: /* Code originally from ext/sockets */
! 25:
! 26: #include <stdio.h>
! 27: #include <fcntl.h>
! 28:
! 29: #include "php.h"
! 30:
! 31: PHPAPI int socketpair(int domain, int type, int protocol, SOCKET sock[2])
! 32: {
! 33: struct sockaddr_in address;
! 34: SOCKET redirect;
! 35: int size = sizeof(address);
! 36:
! 37: if(domain != AF_INET) {
! 38: WSASetLastError(WSAENOPROTOOPT);
! 39: return -1;
! 40: }
! 41:
! 42:
! 43: sock[0] = socket(domain, type, protocol);
! 44: address.sin_addr.s_addr = INADDR_ANY;
! 45: address.sin_family = AF_INET;
! 46: address.sin_port = 0;
! 47:
! 48: bind(sock[0], (struct sockaddr*)&address, sizeof(address));
! 49:
! 50: if(getsockname(sock[0], (struct sockaddr *)&address, &size) != 0) {
! 51: }
! 52:
! 53: listen(sock[0], 2);
! 54: sock[1] = socket(domain, type, protocol);
! 55: address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
! 56:
! 57: connect(sock[1], (struct sockaddr*)&address, sizeof(address));
! 58: redirect = accept(sock[0],(struct sockaddr*)&address, &size);
! 59:
! 60: closesocket(sock[0]);
! 61: sock[0] = redirect;
! 62:
! 63: if(sock[0] == INVALID_SOCKET ) {
! 64: closesocket(sock[0]);
! 65: closesocket(sock[1]);
! 66: WSASetLastError(WSAECONNABORTED);
! 67: return -1;
! 68: }
! 69:
! 70: return 0;
! 71: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>