64,637
社区成员
发帖
与我相关
我的任务
分享
sprintf(errorMessage, "got connection from %s!the %d connector, %s", inet_ntoa(raddr.sin_addr),countcon, GetCurrentTime(0, 0));
vMsgLog(errorMessage);
lmysock soc=(lmysock)malloc(sizeof(mySock));
MsgLog("new malloc:%d\n",soc->sock);
soc->sock=newsock;
soc->lsock=head;
head=soc;
MsgLog("new Mysock:%d\n",soc->sock);
int
main(int argc, char ** argv) {
int i=0;
int sel=0;
int ret = 0;
int port = 0;
int total = 0;
int sendbuf = 0;
int recvbuf = 0;
int listensock = 0;
int newsock = 0;
int reopen = 0;
int recvsize=0;
int countcon=0,countstop=0;
struct sockaddr_in raddr;
int sinsize = sizeof(struct sockaddr_in);
fd_set readfds;
int maxfds;
int resel;
char prerecv[5];
struct mySock *head=NULL;
// head->lsock=NULL;
struct timeval tival;
char buf[1024];
putenv("TZ=GMT-8");/*¶«°ËÇø*/
tzset();
if(argv[1]) port = atoi(argv[1]);
else port = 8711;
if(argv[2]) total = atoi(argv[2]);
else total = 10;
if(argv[3]) sendbuf = atoi(argv[3]);
else sendbuf = 64 * 1024;
if(argv[4]) recvbuf = atoi(argv[4]);
else recvbuf = 64 * 1024;
//if (myforkDaemon() != 0) return 0;//×Óœø³ÌŒÌÐø
vMsgLog("MYDB Remote Server Father Process started!\n");
ret = listensock = OpenTCPServer(port, total, sendbuf, recvbuf);
if(ret < 0) {
vMsgLog(errorMessage);
exit(0);
}
while(!exiting) {
if(listensock < 0) {
ret = listensock = OpenTCPServer(port, total, sendbuf, recvbuf);
if(ret < 0) {
unsigned int sleeptime = 3;
vMsgLog(errorMessage);
while((sleeptime=sleep(sleeptime)) && !exiting) vMsgLog("re sleep %u\n",sleeptime);
/* */
reopen++;
if(reopen > 10) {
}
}
else reopen = 0;
}
else {
tival.tv_sec = 90; /*ÕâžöÊýÖµÊÇ·ñ¿ÉÒÔÉèÖÃŽóÒ»µã£¿ 90 us Ҳ̫СÁË£¬ÄãµÄ³ÌÐòÐŽlog¶Œ»áÐŽ±¬ÁË¡£*/
tival.tv_usec = 0;
FD_ZERO(&readfds); /*Initialize the readfds*/
if(listensock >= 0) {
FD_SET(listensock, &readfds);
maxfds = (listensock > maxfds)?listensock:maxfds;
}
lmysock node=head;
while(node!=NULL)
{
FD_SET(node->sock, &readfds);
maxfds = (node->sock > maxfds)?node->sock:maxfds;
node=node->lsock;
}
reselect:
ret = select(maxfds + 1, &readfds, NULL, NULL,&tival );
if(ret < 0) {
if (EINTR==errno) {
if(exiting) break;
resel++;
if(resel < 5) goto reselect;
else {
resel = 0;
sprintf(errorMessage, "Á¬Ðø5ŽÎEINTR %s", GetCurrentTime(0, 0));
vMsgLog(errorMessage);
/*±šŸ¯Œ°ÏÂÒ»²œŽŠÀí*/
}
}
else {
sprintf(errorMessage, "select error!%d errno=%d, errortext:%s %s", ret, errno, strerror(errno), GetCurrentTime(0, 0));
vMsgLog(errorMessage);
/*±šŸ¯Œ°ÏÂÒ»²œŽŠÀí*/
}
}
else if(ret == 0) {
sprintf(errorMessage, "ÎÞÁ¬œÓÉÏÀŽ! %s", GetCurrentTime(0, 0));
vMsgLog(errorMessage);
continue;
}
if(FD_ISSET(listensock, &readfds))
{
ret = newsock = accept(listensock, (struct sockaddr *)&raddr, &sinsize);
//soc[use]=newsock;use++;
if(ret < 0)
{
sprintf(errorMessage, "accept() returned:%d\n", ret);
vMsgLog(errorMessage);
}
else
{
countcon++;
sprintf(errorMessage, "got connection from %s!the %d connector, %s", inet_ntoa(raddr.sin_addr),countcon, GetCurrentTime(0, 0));
vMsgLog(errorMessage);
lmysock soc=(lmysock)malloc(sizeof(mySock));
MsgLog("new malloc:",soc->sock);
soc->sock=newsock;
soc->lsock=head;
head=soc;
MsgLog("new Mysock:%d\n",soc->sock);
}
}
else
{
node=head;lmysock nextnode;
while(node!=NULL)
{
nextnode=node->lsock;
if(FD_ISSET(node->sock,&readfds))
{
MsgLog("fd isset:%d \n",node->sock);
memset(buf,0,1024);
ret=recv(node->sock, prerecv, 4, 0);
if(ret==0)
{
lmysock prenode=head;
if(prenode->sock==node->sock)
head=prenode->lsock;
else
{
while(prenode->lsock!=node)
{
prenode=prenode->lsock;
}
prenode->lsock=node->lsock;
}
close(node->sock);
free(node);
countstop++;
vMsgLog("%d connect stopped!\n",countstop);
node=prenode->lsock;
continue;
}
prerecv[4]='\0';
recvsize=atoi(prerecv);
memset(prerecv,0,4);
ret=myRecv(node, buf, recvsize, 0,head);
if(ret==0)
{
close(node->sock);
free(node);
vMsgLog("%d connect stopped wrong!\n",countstop);
node=nextnode;
continue;
}
ret = mySend(node->sock, buf, recvsize, 0);
if(ret<0)
{
vMsgLog("send error!");
}
}
node=node->lsock;
}
}
}
}
close(listensock);
vMsgLog("MYDB Remote Server Father Process stopped!\n");
return 0;
}
#include <time.h>
#include <stdlib.h>
#include <windows.h>
int main() {
int a,b[11];//本来是b[10],为判断哪句越界,故意声明为b[11]
srand((unsigned int)time(NULL));//按两次F11,等黄色右箭头指向本行时,调试、新建断点、新建数据断点,地址:&b[10],字节计数:4,确定。
while (1) {//按F5,会停在下面某句,此时a的值为10,b[10]已经被修改为对应0..4之一。
b[(a=rand()%11)]=0;
Sleep(100);
b[(a=rand()%11)]=1;
Sleep(100);
b[(a=rand()%11)]=2;
Sleep(100);
b[(a=rand()%11)]=3;
Sleep(100);
b[(a=rand()%11)]=4;
Sleep(100);
}
return 0;
}
lmysock soc=(lmysock)malloc(sizeof(mySock));
//这里加一个判断 试试
if( soc == NULL ) //看使不能资源耗尽了,分配不了内存出错的!
{
printf(" malloc failed \n");
}