File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / win32 / sockets.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:34:34 2012 UTC (12 years, 1 month ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_17p0, HEAD
php 5.4.3+patches

    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,v 1.1.1.2 2012/05/29 12:34:34 misho Exp $ */
   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>