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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? socketfile.c

?? 在UC-OS下開發的TCP-IP-PPP協議棧
?? C
字號:
/** * Socket Device Filesystem Driver * * @file socketfile.c * @author <a href="mailto:c_graham@hinge.mistral.co.uk>Craig Graham</a> * @ingroup fsdevices * @{ */#include <config.h>#include <file.h>#include <stddef.h>#include <stdio.h>#include <stdlib.h>#include <file.h>#include <debug.h>#include <adl.h>#include <ls588.h>#include <semaphore.h>#include <interupt.h>#include <sys/socket.h>#include <malloc.h>//#include "netconf.h"//#include "net.h"#include "netdebug.h"#include "netbuf.h"#include "netppp.h"#include "nettcp.h"#include "netudp.h"static int socket_chdir(const char *dir);static int socket_mkdir(const char *dir);static void *socket_open(const char *name,int mode);static int socket_close(void *sdata);static long socket_read(void *sdata, unsigned char *buf, long l);static long socket_write(void *sdata, const unsigned char *buf, long l);static long socket_lseek(void *sdata, long offset, int whence);static int socket_fdelete(const char *name);static long socket_ioctl(void *sdata,UI32 ioctlValue,void *data);static long socket_poll(void *sdata);/** * Internal socket information */typedef struct {	int domain;	int type;	int protocol;	int id;} SOCKET_FS_DATA;/** * Exported driver interface for Socket Filesystem */FS_DRIVER socketfs={	/** Device Name */	"SocketFS",	/** chdir */	socket_chdir,	/** mkdir */	socket_mkdir,	/** open */	socket_open,	/** close */	socket_close,	/** read */	socket_read,	/** write */	socket_write,	/** lseek */	socket_lseek,	/** fdelete */	socket_fdelete,	/** ioctl */	socket_ioctl,	/** poll */	socket_poll};/** * stub for chdir */static int socket_chdir(const char *dir){	return 0;}/** * stub for mkdir */static int socket_mkdir(const char *dir){	return 0;}/** * Open the socket device */static void *socket_open(const char *name,int mode){	SOCKET_FS_DATA *sdata;	//GENERAL_DEBUG(("socket_open:'%s'\n",name));	sdata=(SOCKET_FS_DATA*)malloc(sizeof(SOCKET_FS_DATA));	if(sdata==NULL)		return NULL;	sdata->id=-1;	sdata->domain=AF_UNSPEC;	sdata->type=SOCK_STREAM;	sdata->protocol=0;	return (void*)sdata;}/** * Close the socket device */static int socket_close(void *sdata){	//GENERAL_DEBUG(("socket_close\n"));	switch(((SOCKET_FS_DATA*)sdata)->protocol)	{		case IPPROTO_TCP:			tcpClose(((SOCKET_FS_DATA*)sdata)->id);			//tcpWait(((SOCKET_FS_DATA*)sdata)->id);			break;		case IPPROTO_UDP:			udpClose(((SOCKET_FS_DATA*)sdata)->id);			break;	}	return 0;}/** * Read data from the socket device */static long socket_read(void *sdata, unsigned char *buf, long l){	int rtn;	//GENERAL_DEBUG(("socket_read: len=%ld\n",l));//	printf("socket_read: l=%ld\n",l);	switch(((SOCKET_FS_DATA*)sdata)->protocol)	{		case IPPROTO_TCP:			rtn=tcpRead(((SOCKET_FS_DATA*)sdata)->id,buf,l);			break;		case IPPROTO_UDP:			rtn=udpRead(((SOCKET_FS_DATA*)sdata)->id,buf,l);			break;	}	return rtn;}/** * Write data to the socket device */static long socket_write(void *sdata, const unsigned char *buf, long l){	int rtn;//	printf("socket_write: l=%ld\n",l);	switch(((SOCKET_FS_DATA*)sdata)->protocol)	{		case IPPROTO_TCP:			rtn=tcpWrite(((SOCKET_FS_DATA*)sdata)->id,buf,l);			break;		case IPPROTO_UDP:			rtn=udpWrite(((SOCKET_FS_DATA*)sdata)->id,buf,l);			break;		default:			printf("socket_write: unknown protocol\n");			break;	}	return rtn;}/** * stub for lseek */static long socket_lseek(void *sdata, long offset, int whence){	return 0;}/** * stub for fdelete */static int socket_fdelete(const char *name){	return 0;}/** * stub for ioctl */static long socket_ioctl(void *sdata,UI32 ioctlValue,void *data){	long rtn;	switch(ioctlValue)	{		case IOCTL_DEVCAPS:			rtn=IOCTL_DEVCAPS|IOCTL_PENDINGDATALENGTH|IOCTL_SOCKDOMAIN|IOCTL_SOCKTYPE|IOCTL_SOCKPROTOCOL;			break;		case IOCTL_PENDINGDATALENGTH:			//GENERAL_DEBUG(("should return amount of data available here\n"));			rtn=0;			break;		case IOCTL_SOCKDOMAIN:			if(data)				((SOCKET_FS_DATA*)sdata)->domain=*(int*)data;			rtn=((SOCKET_FS_DATA*)sdata)->domain;			break;		case IOCTL_SOCKTYPE:			if(data)				((SOCKET_FS_DATA*)sdata)->type=*(int*)data;			rtn=((SOCKET_FS_DATA*)sdata)->type;			break;		case IOCTL_SOCKPROTOCOL:			if((data)&&(((SOCKET_FS_DATA*)sdata)->id==-1))			{				((SOCKET_FS_DATA*)sdata)->protocol=*(int*)data;				switch(((SOCKET_FS_DATA*)sdata)->protocol)				{					case IPPROTO_UDP:						((SOCKET_FS_DATA*)sdata)->id=udpOpen();						printf("socket_ioctl: protocol=udp, ucIP ID=%d\n",((SOCKET_FS_DATA*)sdata)->id);						break;					case IPPROTO_TCP:						((SOCKET_FS_DATA*)sdata)->id=tcpOpen();						printf("socket_ioctl: protocol=tcp, ucIP ID=%d\n",((SOCKET_FS_DATA*)sdata)->id);//						{//							int inCnt=10;//							tcpIOCtl(((SOCKET_FS_DATA*)sdata)->id, TCPCTLS_KEEPALIVE, &inCnt);//						}						break;					default:						//GENERAL_DEBUG(("socket_ioctl:IOCTL_SOCKPROTOCOL: unsupported protocol %d\n",((SOCKET_FS_DATA*)sdata)->protocol));						((SOCKET_FS_DATA*)sdata)->protocol=-1;						break;				}			}			rtn=((SOCKET_FS_DATA*)sdata)->protocol;			break;		default:			rtn=-1;			break;	}	return rtn;}static long socket_poll(void *sdata){	long rtn;	switch(((SOCKET_FS_DATA*)sdata)->protocol)	{		case IPPROTO_UDP:			rtn=udpPoll(((SOCKET_FS_DATA*)sdata)->id);			break;		case IPPROTO_TCP:			rtn=tcpPoll(((SOCKET_FS_DATA*)sdata)->id);			break;	}	return rtn;}/** * Helper function - standard Unix way of creating a socket */int socket(int domain, int type, int protocol){	int fd;	fd=open("/dev/socket/0",O_RDWR);	if(fd>=0)	{		printf("socket: socket fd=%d\n",fd);		ioctl(fd,IOCTL_SOCKDOMAIN,&domain);		ioctl(fd,IOCTL_SOCKTYPE,&type);		if(protocol==0)			protocol=(type==SOCK_STREAM)?IPPROTO_TCP:IPPROTO_UDP;		ioctl(fd,IOCTL_SOCKPROTOCOL,&protocol);	}else{		while(1);			printf("socket: cann't open /dev/socket/0\n");	}	return fd;}/** * Helper function - standard Unix way of connecting a socket to a server. */int  connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen){	FILE *sf;	int rtn;	sf=fdopen(sockfd, "rw");	printf("connect:socket fd=%d\n",sockfd);	if(sf==NULL)	{		printf("connect: invalid socket handle\n");		return -1;	}	switch(serv_addr->na_family)	{		case AF_INET:			switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)			{				case IPPROTO_TCP:					rtn=tcpConnect(((SOCKET_FS_DATA*)sf->driverData)->id, (const struct sockaddr_in*)serv_addr, 0);					printf("tcpConnect returned %d\n",rtn);					break;				case IPPROTO_UDP:					rtn=udpConnect(((SOCKET_FS_DATA*)sf->driverData)->id, (const struct sockaddr_in*)serv_addr, 0);					printf("udpConnect returned %d\n",rtn);					break;				default:					printf("connect: unsupported protocol %ld\n",((SOCKET_FS_DATA*)sf->driverData)->protocol);					break;			}			break;		case AF_UNSPEC:			switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)			{				case IPPROTO_TCP:					rtn=tcpDisconnect(((SOCKET_FS_DATA*)sf->driverData)->id);					break;				case IPPROTO_UDP:					//rtn=udpDisconnect(((SOCKET_FS_DATA*)sf->driverData)->id);					break;				default:					printf("connect: unsupported protocol %ld\n",((SOCKET_FS_DATA*)sf->driverData)->protocol);					break;			}			break;		default:			printf("connect: unsupported address family %ld\n",serv_addr->na_family);			rtn=-1;			break;	}	return rtn;}int accept(int sockfd, struct sockaddr  *addr, socklen_t *addrlen){	FILE *sf;	int remoteId,remoteFD;	sf=fdopen(sockfd, "rw");	if(sf==NULL)	{		printf("accept: invalid socket handle\n");		return -1;	}	switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)	{		case IPPROTO_TCP:			remoteId=tcpAccept(((SOCKET_FS_DATA*)sf->driverData)->id, (struct sockaddr_in *)addr);			if(remoteId>=0)			{				FILE *r_sf;				remoteFD=open("/dev/socket/0",O_RDWR);				if(remoteFD>=0)				{					r_sf=fdopen(remoteFD,"rw");					printf("accept: remoteFD=%d\n",remoteFD);					((SOCKET_FS_DATA*)r_sf->driverData)->protocol=IPPROTO_TCP;					((SOCKET_FS_DATA*)r_sf->driverData)->id=remoteId;					return remoteFD;				}else{					printf("accept: couldn't open /dev/socket/0\n");					tcpClose(remoteId);				}			}else{				printf("accept: uC/IP returned error code %d\n",remoteId);			}			break;		default:			printf("accept: cann't accept() on this class of socket\n");			break;	}	return -1;}int listen(int sockfd, int backlog){	FILE *sf;	int rtn=0;	sf=fdopen(sockfd, "rw");	if(sf==NULL)	{		printf("listen: cann't get FILE for fd=%d\n",sockfd);		return -1;	}	switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)	{		case IPPROTO_TCP:			printf("calling tcpListen(%d,%d)\n",((SOCKET_FS_DATA*)sf->driverData)->id,backlog);			rtn=tcpListen(((SOCKET_FS_DATA*)sf->driverData)->id, backlog);			if(rtn<0)			{				setErrno(rtn);				rtn=-1;			}else{				rtn=0;			}			break;		case IPPROTO_UDP:			printf("calling udpListen(%d,%d)\n",((SOCKET_FS_DATA*)sf->driverData)->id,backlog);			rtn=udpListen(((SOCKET_FS_DATA*)sf->driverData)->id, backlog);			break;		default:			printf("listen: unknown protocol\n");			rtn=-1;			break;	}	return rtn;}int bind(int sockfd, struct sockaddr *addr, socklen_t addrlen){	FILE *sf;	int rtn;	//GENERAL_DEBUG(("bind: sockfd=%d\n",sockfd));	printf("bind: socket fd=%d\n",sockfd);	sf=fdopen(sockfd, "rw");	if(sf==NULL)	{		printf("bind: cann't get FILE for fd=%d\n",sockfd);		return -1;	}	switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)	{		case IPPROTO_TCP:			//GENERAL_DEBUG(("calling tcpBind()\n"));			rtn=tcpBind(((SOCKET_FS_DATA*)sf->driverData)->id, (struct sockaddr_in*)addr);			printf(" - using tcp\n");			break;		case IPPROTO_UDP:			//GENERAL_DEBUG(("calling udpBind()\n"));			rtn=udpBind(((SOCKET_FS_DATA*)sf->driverData)->id, (struct sockaddr_in*)addr);			printf(" - using udp\n");			break;		default:			printf("bind: unknown protocol\n");			rtn=-1;			break;	}	return rtn;}long recvfrom(int sockfd,  void  *buf,  size_t len, int flags,  struct sockaddr *from, socklen_t *fromlen){	FILE *sf;	int rtn;	//GENERAL_DEBUG(("recvfrom()\n"));	sf=fdopen(sockfd, "rw");	if(sf==NULL)		return -1;	switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)	{		case IPPROTO_TCP:			rtn=tcpRead(((SOCKET_FS_DATA*)sf->driverData)->id,buf,len);			break;		case IPPROTO_UDP:			//GENERAL_DEBUG(("calling udpRecvFrom()\n"));			rtn=udpRecvFrom(((SOCKET_FS_DATA*)sf->driverData)->id, buf, len, (struct sockaddr_in*)from);			break;	}	if(fromlen)		*fromlen=sizeof(struct sockaddr_in);	return rtn;}long sendto(int sockfd,  const void  *buf,  size_t len, int flags,  const struct sockaddr *to, socklen_t tolen){	FILE *sf;	int rtn;	//GENERAL_DEBUG(("sendto()\n"));	sf=fdopen(sockfd, "rw");	if(sf==NULL)		return -1;	switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)	{		case IPPROTO_TCP:			tcpDisconnect(((SOCKET_FS_DATA*)sf->driverData)->id);			rtn=tcpConnect(((SOCKET_FS_DATA*)sf->driverData)->id, (const struct sockaddr_in*)to, 0);			if(rtn<0)				break;			rtn=tcpWrite(((SOCKET_FS_DATA*)sf->driverData)->id,buf,len);			break;		case IPPROTO_UDP:			//GENERAL_DEBUG(("calling udpSendTo()\n"));			rtn=udpSendTo(((SOCKET_FS_DATA*)sf->driverData)->id, buf, len, (const struct sockaddr_in*)to);			break;	}	return rtn;}void unblock(int sockfd){	FILE *sf;	sf=fdopen(sockfd, "rw");	if(sf==NULL)		return;	switch(((SOCKET_FS_DATA*)sf->driverData)->protocol)	{		case IPPROTO_TCP:			break;		case IPPROTO_UDP:			//GENERAL_DEBUG(("calling udpUnblockRead()\n"));			udpUnblockRead(((SOCKET_FS_DATA*)sf->driverData)->id);			break;	}}int setsockopt(int s, int level, int optname,  const  void *optval, socklen_t optlen){	// stub for setsockopt}int send(int s, const void *msg, size_t len, int flags){	FILE *sf;	sf=fdopen(s, "rw");	if(sf==NULL)	{		printf("send: error getting FILE from descriptor %d\n",s);		return -1;	}	return socket_write(sf->driverData, (const unsigned char*)msg, len);}int recv(int s, void *buf, size_t len, int flags){	FILE *sf;	sf=fdopen(s, "rw");	if(sf==NULL)	{		printf("recv: error getting FILE from descriptor %d\n",s);		return -1;	}	socket_read(sf->driverData, (unsigned char*)buf, len);}/** @} */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美老肥妇做.爰bbww| 国产精品午夜在线观看| 欧美精品一区二区精品网| 亚洲视频一二三区| 国产一区二区三区四区五区入口 | 国产欧美日韩精品一区| 亚洲高清免费观看高清完整版在线观看 | 日韩电影一区二区三区| 激情欧美一区二区三区在线观看| 99视频精品在线| 日韩欧美精品在线视频| 亚洲精品大片www| yourporn久久国产精品| 精品免费视频一区二区| 亚洲午夜日本在线观看| 国产99久久精品| 精品99一区二区| 日韩精品欧美成人高清一区二区| 94-欧美-setu| 国产欧美一区二区精品性色超碰 | 国产一区二区三区精品视频| 欧美欧美欧美欧美首页| 亚洲色大成网站www久久九九| 韩国精品久久久| 欧美一二三四区在线| 亚洲bdsm女犯bdsm网站| 91色九色蝌蚪| 亚洲日本在线天堂| 成人亚洲精品久久久久软件| 久久久久亚洲蜜桃| 久久av资源网| 2020日本不卡一区二区视频| 琪琪一区二区三区| 日韩精品一区二区三区在线观看 | 亚洲欧美日韩成人高清在线一区| 成人夜色视频网站在线观看| 国产精品色噜噜| 国产 日韩 欧美大片| 国产视频一区在线观看| 国产成人精品一区二区三区四区 | 日韩欧美一级特黄在线播放| 日韩av在线播放中文字幕| 欧美日韩一区不卡| 三级成人在线视频| 精品国产免费视频| 国产精品夜夜嗨| 国产精品美女久久久久av爽李琼| 成人av网站免费| 国产精品午夜久久| 91浏览器入口在线观看| 一区二区三区四区乱视频| 欧美日韩亚洲丝袜制服| 久久精品国产亚洲aⅴ| 精品国内二区三区| 成人精品视频网站| 一区二区三区四区蜜桃| 欧美男女性生活在线直播观看| 午夜视频在线观看一区二区| 日韩三级精品电影久久久 | 91亚洲午夜精品久久久久久| 一区二区成人在线观看| 欧美一区二区日韩| 韩国v欧美v日本v亚洲v| 亚洲视频一区在线| 日韩一级精品视频在线观看| 国产精品资源站在线| 亚洲色图一区二区三区| 欧美一区二区三区在线视频| 国产a视频精品免费观看| 一区二区三区四区在线| 日韩欧美国产精品| 91首页免费视频| 久久99精品国产.久久久久久| 国产精品午夜在线| 欧美一级理论片| 99精品视频在线观看免费| 青青草91视频| 亚洲精品免费视频| 久久久亚洲欧洲日产国码αv| 91女人视频在线观看| 狠狠色丁香久久婷婷综| 亚洲一区免费观看| 欧美国产精品一区二区三区| 欧美日韩激情在线| 99精品国产99久久久久久白柏| 人人爽香蕉精品| 亚洲视频一区二区在线| 久久午夜电影网| 欧美精品色一区二区三区| 成人一区二区三区| 国产中文字幕一区| 视频在线观看一区二区三区| 亚洲欧美日韩国产成人精品影院| 久久久亚洲午夜电影| 3d动漫精品啪啪| 欧美综合色免费| www.欧美日韩国产在线| 久久99精品国产麻豆婷婷| 午夜欧美在线一二页| 夜夜嗨av一区二区三区中文字幕| 欧美极品美女视频| 2023国产一二三区日本精品2022| 这里只有精品免费| 欧美午夜精品一区| 在线国产亚洲欧美| 一本色道久久综合亚洲91 | 亚洲色图欧洲色图婷婷| 欧美激情一区二区三区全黄| 精品区一区二区| 欧美一区永久视频免费观看| 在线观看免费亚洲| 91久久一区二区| 欧美性猛交一区二区三区精品| 99久久99久久免费精品蜜臀| 国产91对白在线观看九色| 国产麻豆成人精品| 国产米奇在线777精品观看| 国精品**一区二区三区在线蜜桃| 久久99久久久久| 久久精品国产一区二区三| 久久精品99国产国产精| 免费的国产精品| 美女脱光内衣内裤视频久久网站 | 香蕉成人啪国产精品视频综合网 | 亚洲欧美一区二区三区极速播放 | 一本久久综合亚洲鲁鲁五月天| 不卡高清视频专区| 91视频观看免费| 欧美性生活大片视频| 欧美日韩在线播放一区| 欧美裸体bbwbbwbbw| 日韩视频中午一区| 久久久久久久久久看片| 国产精品久久毛片a| 亚洲日本在线视频观看| 无码av免费一区二区三区试看| 日本aⅴ精品一区二区三区 | 久久综合狠狠综合| 国产肉丝袜一区二区| 亚洲欧洲精品一区二区三区不卡| 亚洲免费视频中文字幕| 日韩福利电影在线| 国产精品白丝av| 欧美在线观看一区| 精品久久五月天| 中文字幕一区二| 日韩av一二三| 99久久99久久综合| 91精品视频网| 国产精品蜜臀av| 日韩激情视频在线观看| 国产精品99久久久久| 色噜噜夜夜夜综合网| 欧美成人性福生活免费看| 国产精品国产三级国产专播品爱网| 亚洲综合精品久久| 国产a视频精品免费观看| 欧美日韩激情一区二区三区| 国产欧美精品一区二区色综合朱莉| 一卡二卡三卡日韩欧美| 久久er精品视频| 欧美三级视频在线播放| 日本一区二区免费在线观看视频| 伊人开心综合网| 国产成人精品亚洲日本在线桃色| 欧美性猛交xxxx乱大交退制版| 日本一区二区三区高清不卡| 日本最新不卡在线| 91丨九色丨黑人外教| 久久毛片高清国产| 蜜桃av噜噜一区二区三区小说| 91麻豆免费看片| 国产欧美日本一区视频| 久久精品国产99国产| 欧美视频在线观看一区| 日韩美女精品在线| 国产精品一区二区三区四区| 欧美精品乱人伦久久久久久| 欧美国产激情二区三区| 日本不卡的三区四区五区| 亚洲一区二区三区四区在线观看 | 国产激情91久久精品导航| 欧美男同性恋视频网站| 中文字幕av资源一区| 九九视频精品免费| 成人av在线一区二区| 久久日韩精品一区二区五区| 青青草国产精品亚洲专区无| 不卡的电视剧免费网站有什么| 久久影院电视剧免费观看| 日韩精品最新网址| 国产精品视频yy9299一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 91碰在线视频| 国产精品视频观看| 国产精品一卡二| 久久久久久久久99精品| 日韩成人一级大片| 91网站最新网址| 日韩精品一区二区三区swag|