socket.h
来自「网页抓取程序」· C头文件 代码 · 共 187 行
H
187 行
/* OpenWebSpider* * Authors: Stefano Alimonti AND Stefano Fantin * Version: 0.7 * E-Mails: shen139 [at] openwebspider (dot) org AND stefanofantinguz@yahoo.it*** This file is part of OpenWebSpider** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA**/#ifndef __SOCKET#define __SOCKET#define SEND(sock,buf) send(sock,buf,strlen(buf),0)SOCKET OWS_Server_fd_conn;SOCKET OWS_Server_fd;int setnonblock(SOCKET sock,int to){#ifdef WIN32 setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,(char*) &to, sizeof(int));#else struct timeval timeout; timeout.tv_sec = to/1000; timeout.tv_usec=0; if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,(char*) &timeout, sizeof(timeout))) return 0;#endif return 1;}int StartUpWinsock(){#ifdef WIN32 WSADATA wsadata; if((WSAStartup(MAKEWORD(1,1),&wsadata))!=0 || (LOBYTE(wsadata.wVersion )!=1 || HIBYTE(wsadata.wVersion)!=1)) return 0;#endif return 1;}int LoadSocket(SOCKET *sock,struct sHost* shost,SOCKADDR_IN *saddr){ struct hostent *gAddr; if(strlen(shost->Host)<3) return 0; *sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); #ifdef WIN32 if (*sock==INVALID_SOCKET)#else if (*sock<0)#endif return 0; if((gAddr=gethostbyname(shost->Host))==0) return 0; saddr->sin_addr.s_addr=((struct in_addr *)(gAddr->h_addr))->s_addr; saddr->sin_family = AF_INET; saddr->sin_port = htons((unsigned short int)shost->port); return 1;}int RecvPackets(SOCKET *sock,char* packet, int maxlen){ int x=0; int recvdbytes=0; memset(packet,0,maxlen); recvdbytes=0; setnonblock(*sock, FIRSTTIMEOUT); do { recvdbytes=recv(*sock,packet+x,50000,0); if(recvdbytes>0) x+=recvdbytes; else return x; setnonblock(*sock, TIMEOUTs); } while(recvdbytes!=0 && x+50000<maxlen); /*testing mycstr*/ /* MYCSTR test; char curPack[50000]; test.myString=NULL; myCStrCpy(&test, ""); memset(packet,0,maxlen); recvdbytes=0; setnonblock(*sock, FIRSTTIMEOUT); do { recvdbytes=recv(*sock,curPack,50000,0); if(recvdbytes>0) { x+=recvdbytes; myCStrMemCat(&test, curPack,recvdbytes); } else { printf("\n\n\n\n_______%i______%i_____\n\n\n",x,x/1024); strncpy(packet,test.myString,maxlen); return x; } setnonblock(*sock, TIMEOUTs); } while(recvdbytes!=0); printf("\n\n\n\n_______%i______%i_____\n\n\n",x,x/1024); strncpy(packet,test.myString,maxlen); */ return x;}/*OWS Server*/int ListenToPort(int port, SOCKET* fd){int opt = 1; SOCKADDR_IN saddr; *fd=socket(AF_INET,SOCK_STREAM,0);#ifdef WIN32 if (*fd==INVALID_SOCKET)#else if (*fd<0)#endif return -1; setsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); saddr.sin_family = AF_INET; saddr.sin_addr.s_addr= htonl(INADDR_ANY); saddr.sin_port = htons((unsigned short int)port); if (bind(*fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR) return -2; if (listen(*fd,100) == SOCKET_ERROR) return -3; return 1;}#endif/*EOF*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?