亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? net_udp.c

?? 網(wǎng)絡(luò)MPEG4IP流媒體開發(fā)源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * FILE:     net_udp.c * AUTHOR:   Colin Perkins  * MODIFIED: Orion Hodson & Piers O'Hanlon *  * Copyright (c) 1998-2000 University College London * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, is permitted provided that the following conditions  * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software *    must display the following acknowledgement: *      This product includes software developed by the Computer Science *      Department at University College London * 4. Neither the name of the University nor of the Department may be used *    to endorse or promote products derived from this software without *    specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* If this machine supports IPv6 the symbol HAVE_IPv6 should *//* be defined in either config_unix.h or config_win32.h. The *//* appropriate system header files should also be included   *//* by those files.                                           */#include "config_unix.h"#include "config_win32.h"#include "debug.h"#include "memory.h"#include "inet_pton.h"#include "inet_ntop.h"#include "vsnprintf.h"#include "net_udp.h"#ifdef NEED_ADDRINFO_H#include "addrinfo.h"#endif#define IPv4	4#define IPv6	6#ifdef WIN2K_IPV6const struct	in6_addr	in6addr_any = {IN6ADDR_ANY_INIT};#endif/* This is pretty nasty but it's the simplest way to get round *//* the Detexis bug that means their MUSICA IPv6 stack uses     *//* IPPROTO_IP instead of IPPROTO_IPV6 in setsockopt calls      *//* We also need to define in6addr_any */#ifdef  MUSICA_IPV6#define	IPPROTO_IPV6	IPPROTO_IPstruct	in6_addr	in6addr_any = {IN6ADDR_ANY_INIT};/* These DEF's are required as MUSICA's winsock6.h causes a clash with some of the  * standard ws2tcpip.h definitions (eg struct in_addr6). * Note: winsock6.h defines AF_INET6 as 24 NOT 23 as in winsock2.h - I have left it * set to the MUSICA value as this is used in some of their function calls.  *///#define AF_INET6        23#define IP_MULTICAST_LOOP      11 /*set/get IP multicast loopback */#define	IP_MULTICAST_IF		9 /* set/get IP multicast i/f  */#define	IP_MULTICAST_TTL       10 /* set/get IP multicast ttl */#define	IP_MULTICAST_LOOP      11 /*set/get IP multicast loopback */#define	IP_ADD_MEMBERSHIP      12 /* add an IP group membership */#define	IP_DROP_MEMBERSHIP     13/* drop an IP group membership */#define IN6_IS_ADDR_UNSPECIFIED(a) (((a)->s6_addr32[0] == 0) && \									((a)->s6_addr32[1] == 0) && \									((a)->s6_addr32[2] == 0) && \									((a)->s6_addr32[3] == 0))struct ip_mreq {	struct in_addr imr_multiaddr;	/* IP multicast address of group */	struct in_addr imr_interface;	/* local IP address of interface */};#endif#ifndef INADDR_NONE#define INADDR_NONE 0xffffffff#endifstruct _socket_udp {	int	 	 mode;	/* IPv4 or IPv6 */        char	        *addr;	uint16_t	 rx_port;	uint16_t	 tx_port;	ttl_t	 	 ttl;	fd_t	 	 fd;	struct in_addr	 addr4;#ifdef HAVE_IPv6	struct in6_addr	 addr6;#endif /* HAVE_IPv6 */};#ifdef WIN32/* Want to use both Winsock 1 and 2 socket options, but since* IPv6 support requires Winsock 2 we have to add own backwards* compatibility for Winsock 1.*/#define SETSOCKOPT winsock_versions_setsockopt#else#define SETSOCKOPT setsockopt#endif /* WIN32 *//*****************************************************************************//* Support functions...                                                      *//*****************************************************************************/static voidsocket_error(const char *msg, ...){	char		buffer[255];	uint32_t	blen = sizeof(buffer) / sizeof(buffer[0]);	va_list		ap;#ifdef WIN32#define WSERR(x) {#x,x}	struct wse {		char  errname[20];		int my_errno;	};	struct wse ws_errs[] = {		WSERR(WSANOTINITIALISED), WSERR(WSAENETDOWN),     WSERR(WSAEACCES),		WSERR(WSAEINVAL),         WSERR(WSAEINTR),        WSERR(WSAEINPROGRESS),		WSERR(WSAEFAULT),         WSERR(WSAENETRESET),    WSERR(WSAENOBUFS),		WSERR(WSAENOTCONN),       WSERR(WSAENOTSOCK),     WSERR(WSAEOPNOTSUPP),		WSERR(WSAESHUTDOWN),      WSERR(WSAEWOULDBLOCK),  WSERR(WSAEMSGSIZE),		WSERR(WSAEHOSTUNREACH),   WSERR(WSAECONNABORTED), WSERR(WSAECONNRESET),		WSERR(WSAEADDRNOTAVAIL),  WSERR(WSAEAFNOSUPPORT), WSERR(WSAEDESTADDRREQ),		WSERR(WSAENETUNREACH),    WSERR(WSAETIMEDOUT),    WSERR(0)	};		int i, e = WSAGetLastError();	i = 0;	while(ws_errs[i].my_errno && ws_errs[i].my_errno != e) {		i++;	}	va_start(ap, msg);	_vsnprintf(buffer, blen, msg, ap);	va_end(ap);	printf("ERROR: %s, (%d - %s)\n", msg, e, ws_errs[i].errname);#else	uint32_t retlen;	va_start(ap, msg);	retlen = vsnprintf(buffer, blen, msg, ap);	va_end(ap);	blen -= retlen;	snprintf(buffer + retlen, blen, ":%s", strerror(errno));	rtp_message(LOG_ALERT, buffer);#endif}#ifdef WIN32/* ws2tcpip.h defines these constants with different values from* winsock.h so files that use winsock 2 values but try to use * winsock 1 fail.  So what was the motivation in changing the* constants ?*/#define WS1_IP_MULTICAST_IF     2 /* set/get IP multicast interface   */#define WS1_IP_MULTICAST_TTL    3 /* set/get IP multicast timetolive  */#define WS1_IP_MULTICAST_LOOP   4 /* set/get IP multicast loopback    */#define WS1_IP_ADD_MEMBERSHIP   5 /* add  an IP group membership      */#define WS1_IP_DROP_MEMBERSHIP  6 /* drop an IP group membership      *//* winsock_versions_setsockopt tries 1 winsock version of option * optname and then winsock 2 version if that failed.*/static intwinsock_versions_setsockopt(SOCKET s, int level, int optname, const char FAR * optval, int optlen){	int success = -1;	switch (optname) {	case IP_MULTICAST_IF:		success = setsockopt(s, level, WS1_IP_MULTICAST_IF, optval, optlen);		break;	case IP_MULTICAST_TTL:		success = setsockopt(s, level, WS1_IP_MULTICAST_TTL, optval, optlen);		break;	case IP_MULTICAST_LOOP:		success = setsockopt(s, level, WS1_IP_MULTICAST_LOOP, optval, optlen);		break;	case IP_ADD_MEMBERSHIP: 		success = setsockopt(s, level, WS1_IP_ADD_MEMBERSHIP, optval, optlen);		break;	case IP_DROP_MEMBERSHIP: 		success = setsockopt(s, level, WS1_IP_DROP_MEMBERSHIP, optval, optlen);		break;	}	if (success != -1) {		return success;	}	return setsockopt(s, level, optname, optval, optlen);}#endif#ifdef NEED_INET_ATON#ifdef NEED_INET_ATON_STATICstatic #endifint inet_aton(const char *name, struct in_addr *addr){	addr->s_addr = inet_addr(name);	return (addr->s_addr != (in_addr_t) INADDR_NONE);}#endif#ifdef NEED_IN6_IS_ADDR_MULTICAST#define IN6_IS_ADDR_MULTICAST(addr) ((addr)->s6_addr[0] == 0xffU)#endif#if defined(NEED_IN6_IS_ADDR_UNSPECIFIED) && defined(MUSICA_IPV6)#define IN6_IS_ADDR_UNSPECIFIED(addr) IS_UNSPEC_IN6_ADDR(*addr)#endif/*****************************************************************************//* IPv4 specific functions...                                                *//*****************************************************************************/static int udp_addr_valid4(const char *dst){        struct in_addr addr4;	struct hostent *h;	if (inet_pton(AF_INET, dst, &addr4)) {		return TRUE;	} 	h = gethostbyname(dst);	if (h != NULL) {		return TRUE;	}	socket_error("Can't resolve IP address for %s", dst);        return FALSE;}static socket_udp *udp_init4(const char *addr, const char *iface, uint16_t rx_port, uint16_t tx_port, int ttl){	int                 	 reuse = 1;	struct sockaddr_in  	 s_in;	struct in_addr		 iface_addr;#ifdef WIN32	int recv_buf_size = 65536;#endif	socket_udp         	*s = (socket_udp *)malloc(sizeof(socket_udp));	s->mode    = IPv4;	s->addr    = NULL;	s->rx_port = rx_port;	s->tx_port = tx_port;	s->ttl     = ttl;	if (inet_pton(AF_INET, addr, &s->addr4) != 1) {		struct hostent *h = gethostbyname(addr);		if (h == NULL) {			socket_error("Can't resolve IP address for %s", addr);                        free(s);			return NULL;		}		memcpy(&(s->addr4), h->h_addr_list[0], sizeof(s->addr4));	}	if (iface != NULL) {		if (inet_pton(AF_INET, iface, &iface_addr) != 1) {			rtp_message(LOG_ERR, "Illegal interface specification");                        free(s);			return NULL;		}	} else {		iface_addr.s_addr = 0;	}	s->fd = socket(AF_INET, SOCK_DGRAM, 0);	if (s->fd < 0) {		socket_error("socket");		return NULL;	}#ifdef WIN32	if (SETSOCKOPT(s->fd, SOL_SOCKET, SO_RCVBUF, (char *)&recv_buf_size, sizeof(int)) != 0) {	  socket_error("setsockopt SO_RCVBUF");	  return NULL;	}#endif		if (SETSOCKOPT(s->fd, SOL_SOCKET, SO_REUSEADDR, (char *) &reuse, sizeof(reuse)) != 0) {		socket_error("setsockopt SO_REUSEADDR");		return NULL;	}#ifdef SO_REUSEPORT	if (SETSOCKOPT(s->fd, SOL_SOCKET, SO_REUSEPORT, (char *) &reuse, sizeof(reuse)) != 0) {		socket_error("setsockopt SO_REUSEPORT");		return NULL;	}#endif	s_in.sin_family      = AF_INET;	s_in.sin_addr.s_addr = INADDR_ANY;	s_in.sin_port        = htons(rx_port);	if (bind(s->fd, (struct sockaddr *) &s_in, sizeof(s_in)) != 0) {		socket_error("bind: port %d", rx_port);		return NULL;	}	if (IN_MULTICAST(ntohl(s->addr4.s_addr))) {		char            loop = 1;		struct ip_mreq  imr;				imr.imr_multiaddr.s_addr = s->addr4.s_addr;		imr.imr_interface.s_addr = iface_addr.s_addr;				if (SETSOCKOPT(s->fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &imr, sizeof(struct ip_mreq)) != 0) {			socket_error("setsockopt IP_ADD_MEMBERSHIP");			return NULL;		}#ifndef WIN32		if (SETSOCKOPT(s->fd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) != 0) {			socket_error("setsockopt IP_MULTICAST_LOOP");			return NULL;		}#endif		if (SETSOCKOPT(s->fd, IPPROTO_IP, IP_MULTICAST_TTL, (char *) &s->ttl, sizeof(s->ttl)) != 0) {			socket_error("setsockopt IP_MULTICAST_TTL");			return NULL;		}		if (iface_addr.s_addr != 0) {			if (SETSOCKOPT(s->fd, IPPROTO_IP, IP_MULTICAST_IF, (char *) &iface_addr, sizeof(iface_addr)) != 0) {				socket_error("setsockopt IP_MULTICAST_IF");				return NULL;			}		}	}        s->addr = strdup(addr);	return s;}static void udp_exit4(socket_udp *s){	if (IN_MULTICAST(ntohl(s->addr4.s_addr))) {		struct ip_mreq  imr;		imr.imr_multiaddr.s_addr = s->addr4.s_addr;		imr.imr_interface.s_addr = INADDR_ANY;		if (SETSOCKOPT(s->fd, IPPROTO_IP, IP_DROP_MEMBERSHIP, (char *) &imr, sizeof(struct ip_mreq)) != 0) {			socket_error("setsockopt IP_DROP_MEMBERSHIP");			abort();		}		rtp_message(LOG_INFO,  "Dropped membership of multicast group");	}	close(s->fd);        free(s->addr);	free(s);}static int udp_send4(socket_udp *s, uint8_t *buffer, int buflen){	struct sockaddr_in	s_in;		ASSERT(s != NULL);	ASSERT(s->mode == IPv4);	ASSERT(buffer != NULL);	ASSERT(buflen > 0);		s_in.sin_family      = AF_INET;	s_in.sin_addr.s_addr = s->addr4.s_addr;	s_in.sin_port        = htons(s->tx_port);	return sendto(s->fd, buffer, buflen, 0, (struct sockaddr *) &s_in, sizeof(s_in));}#ifndef _WIN32static int udp_send_iov4(socket_udp *s, struct iovec *iov, int count){	struct sockaddr_in	s_in;	struct msghdr 		msg;		ASSERT(s != NULL);	ASSERT(s->mode == IPv4);	ASSERT(iov != NULL);	ASSERT(count > 0);		s_in.sin_family      = AF_INET;	s_in.sin_addr.s_addr = s->addr4.s_addr;	s_in.sin_port        = htons(s->tx_port);	memset(&msg, 0, sizeof(msg));	msg.msg_name 		 = (void *)&s_in;	msg.msg_namelen 	 = sizeof(s_in);	msg.msg_iov 		 = iov;	msg.msg_iovlen 		 = count;	return sendmsg(s->fd, &msg, 0);}#endifstatic char *udp_host_addr4(void){  char    		 hname[MAXHOSTNAMELEN];  struct hostent 		*hent;  struct in_addr  	 iaddr;		if (gethostname(hname, MAXHOSTNAMELEN) != 0) {		rtp_message(LOG_ERR, "Cannot get hostname!");		abort();	}	hent = gethostbyname(hname);	if (hent == NULL) {		socket_error("Can't resolve IP address for %s", hname);		return NULL;	}	ASSERT(hent->h_addrtype == AF_INET);	memcpy(&iaddr.s_addr, hent->h_addr, sizeof(iaddr.s_addr));	strncpy(hname, inet_ntoa(iaddr), MAXHOSTNAMELEN);	return xstrdup(hname);}/*****************************************************************************//* IPv6 specific functions...                                                *//*****************************************************************************/static int udp_addr_valid6(const char *dst){#ifdef HAVE_IPv6        struct in6_addr addr6;	switch (inet_pton(AF_INET6, dst, &addr6)) {        case 1:                  return TRUE;                break;        case 0:                 return FALSE;                break;        case -1:                 rtp_message(LOG_ERR, "inet_pton failed");                errno = 0;        }#endif /* HAVE_IPv6 */        UNUSED(dst);        return FALSE;}static socket_udp *udp_init6(const char *addr, const char *iface, uint16_t rx_port, uint16_t tx_port, int ttl){#ifdef HAVE_IPv6	int                 reuse = 1;	struct sockaddr_in6 s_in;	socket_udp         *s = (socket_udp *) malloc(sizeof(socket_udp));	s->mode    = IPv6;	s->addr    = NULL;	s->rx_port = rx_port;	s->tx_port = tx_port;	s->ttl     = ttl;		if (iface != NULL) {

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
青椒成人免费视频| 国产二区国产一区在线观看 | 欧美精品三级在线观看| 国产一区二区h| 午夜一区二区三区视频| 国产三级一区二区| 欧美日韩一区 二区 三区 久久精品| 狠狠色狠狠色综合系列| 亚洲国产美女搞黄色| 国产欧美日韩不卡| 日韩欧美国产综合在线一区二区三区| 91免费精品国自产拍在线不卡| 免费人成黄页网站在线一区二区| 亚洲男人的天堂在线观看| 久久一二三国产| 91精品国产综合久久精品| 91蜜桃视频在线| 成人黄色综合网站| 国产乱子伦视频一区二区三区| 视频一区在线视频| 亚洲大片在线观看| 亚洲伦理在线免费看| 国产精品乱人伦| 国产午夜一区二区三区| 久久亚洲一区二区三区明星换脸| 欧美狂野另类xxxxoooo| 在线观看日韩高清av| 91一区一区三区| 99久久亚洲一区二区三区青草| 精品一区二区免费看| 另类中文字幕网| 青青草精品视频| 美女mm1313爽爽久久久蜜臀| 天堂一区二区在线| 日韩成人dvd| 日韩av一区二区在线影视| 亚洲一区二区精品久久av| 亚洲国产综合人成综合网站| 夜夜嗨av一区二区三区网页| 一区二区三区四区中文字幕| 一区二区国产视频| 亚洲成人你懂的| 日本成人在线不卡视频| 男女视频一区二区| 精品一区二区三区免费视频| 国产在线播放一区三区四| 国产一区二区三区免费观看| 国产精品一级黄| a在线播放不卡| 91九色02白丝porn| 欧美高清视频在线高清观看mv色露露十八 | 亚洲卡通欧美制服中文| 亚洲精品视频免费看| 亚洲精品成a人| 色综合天天做天天爱| 欧美日韩在线观看一区二区| 色综合久久久久久久久久久| 风间由美一区二区av101| 国产高清视频一区| 成人午夜电影久久影院| av中文字幕在线不卡| 色8久久人人97超碰香蕉987| 在线视频观看一区| 日韩一级二级三级| 久久精品亚洲国产奇米99| 中日韩av电影| 亚洲第一电影网| 美女精品自拍一二三四| 国产精品一色哟哟哟| 99国内精品久久| 欧美夫妻性生活| 久久久亚洲精品一区二区三区| 久久男人中文字幕资源站| 一色屋精品亚洲香蕉网站| 亚洲成人一区二区在线观看| 久久er99精品| 色噜噜狠狠色综合中国| 欧美一区二区高清| 国产精品久99| 日韩电影在线一区二区三区| 日韩专区在线视频| 亚洲综合色在线| 日本不卡在线视频| 成人在线视频首页| 在线视频国内自拍亚洲视频| 91精品婷婷国产综合久久性色| 久久蜜臀精品av| 亚洲午夜电影在线观看| 精品一区二区三区久久久| 成人国产精品免费观看动漫| 欧美日韩不卡一区| 国产精品美女久久久久aⅴ国产馆| 亚洲国产欧美在线| 成人精品国产免费网站| 欧美高清dvd| 中文字幕视频一区| 经典一区二区三区| 欧美在线一区二区| 国产欧美日韩在线看| 久久99国产精品免费网站| 亚洲国产精品黑人久久久| 一个色妞综合视频在线观看| a亚洲天堂av| 欧美精品欧美精品系列| 国产欧美精品一区aⅴ影院| 日产国产欧美视频一区精品| 99久久精品免费| 久久久午夜精品理论片中文字幕| 亚洲综合丁香婷婷六月香| 大胆欧美人体老妇| 欧美成人激情免费网| 亚洲高清视频的网址| 成人高清免费观看| 久久久久高清精品| 日本aⅴ亚洲精品中文乱码| 色综合久久综合中文综合网| 国产欧美一区二区三区沐欲| 免费久久精品视频| 在线成人高清不卡| 亚洲精品国产第一综合99久久 | 亚洲国产日韩精品| proumb性欧美在线观看| 国产亚洲午夜高清国产拍精品 | 中文字幕一区二| 精品国产免费人成在线观看| 一区二区三区在线视频免费观看| 国产91露脸合集magnet| 久久免费视频一区| 九色|91porny| 欧美成人精品二区三区99精品| 午夜精品福利在线| 欧美狂野另类xxxxoooo| 香蕉影视欧美成人| 欧美日韩国产美女| 亚洲国产欧美一区二区三区丁香婷| 91老司机福利 在线| 亚洲欧美一区二区三区久本道91 | 亚洲欧美二区三区| 99re热视频精品| 最新日韩av在线| 91麻豆国产福利在线观看| 中文字幕日韩一区| 色哟哟国产精品| 一区二区三区四区在线| 欧洲精品一区二区| 日日摸夜夜添夜夜添亚洲女人| 欧美高清性hdvideosex| 美女任你摸久久| 久久久国产综合精品女国产盗摄| 国产酒店精品激情| 日韩电影免费在线看| 久久亚洲综合色| 老司机精品视频一区二区三区| 日韩欧美一级二级三级| 老司机精品视频导航| 亚洲精品在线免费观看视频| 国产麻豆精品一区二区| 国产精品污污网站在线观看| 99re免费视频精品全部| 精品99一区二区| 国产91在线观看丝袜| 亚洲人成在线播放网站岛国| 日本久久精品电影| 蜜臀av性久久久久蜜臀aⅴ四虎 | 国产在线一区观看| 国产日产欧产精品推荐色 | 国产盗摄女厕一区二区三区 | 亚洲精品国产高清久久伦理二区| 欧美性受xxxx黑人xyx性爽| 日韩国产精品久久久| 久久综合九色综合欧美98| jizzjizzjizz欧美| 亚瑟在线精品视频| 久久久精品国产99久久精品芒果 | 国产91高潮流白浆在线麻豆| 亚洲色图清纯唯美| 欧美一区二区三区色| 国产美女久久久久| 一区二区三区四区av| 日韩女优av电影| 91在线观看美女| 免费成人小视频| 亚洲三级在线看| 欧美精品一区二区三| 色哟哟国产精品| 国产一区二区三区电影在线观看| 亚洲乱码中文字幕| 久久免费看少妇高潮| 欧美午夜理伦三级在线观看| 狠狠久久亚洲欧美| 一区二区三区在线观看动漫| 精品精品国产高清a毛片牛牛| 91色婷婷久久久久合中文| 裸体健美xxxx欧美裸体表演| 亚洲天堂免费看| 国产偷国产偷精品高清尤物| 欧美老肥妇做.爰bbww| 91亚洲精品乱码久久久久久蜜桃 | 亚洲影院免费观看| 国产日韩欧美a|