Cimmo
17-02-2003, 16:39
Sto di nuovo sotto il mio programmozzo...devo spedire da A a B un pacchetto, ho deciso di spedire prima una sorta di header che dice quanto e' lungo il pacchetto che poi spedisco dopo l'header. Ho fatto 2 funzioni, ma non so perche' l'header arriva, ma poi quando deve ricevere il pacchetto chi spedisce si ferma in un: write() failed [err 104]: Connection reset by peer mentre chi riceve piglia sto errore: read() failed [err 14]: Bad address
i 2 codici sono questi prima chi spedisce:
int sendData(int socketfd, char msg[MAXSIZE])
{
long nwrite, len, n;
/* scrittura */
len=strlen(msg);
nwrite=0;
do
{
if ((n=write(socketfd, &len, (HEADERSIZE-nwrite)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"write() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nwrite+=n;
} while (nwrite<HEADERSIZE);
nwrite=0;
while ((len-nwrite)>0)
{
if ((n=write(socketfd, &(msg[nwrite]), (len-nwrite)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"write() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nwrite+=n;
}
return(0);
};
chi riceve invece ha:
int receiveHeaderAndData(int socketfd, char *msg)
{
long n,nread,header;
nread=0;
do
{
if ((n=read(socketfd, &header, (HEADERSIZE-nread)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"read() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nread+=n;
} while (nread<HEADERSIZE);
nread=0;
printf("\n\nSocketfd: %d: header: %ld\n\n",socketfd,header);
while ((header-nread)>0)
{
if ((n=read(socketfd, &(msg[nread]), (header-nread)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"read() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nread+=n;
}
return(0);
}
i 2 codici sono questi prima chi spedisce:
int sendData(int socketfd, char msg[MAXSIZE])
{
long nwrite, len, n;
/* scrittura */
len=strlen(msg);
nwrite=0;
do
{
if ((n=write(socketfd, &len, (HEADERSIZE-nwrite)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"write() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nwrite+=n;
} while (nwrite<HEADERSIZE);
nwrite=0;
while ((len-nwrite)>0)
{
if ((n=write(socketfd, &(msg[nwrite]), (len-nwrite)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"write() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nwrite+=n;
}
return(0);
};
chi riceve invece ha:
int receiveHeaderAndData(int socketfd, char *msg)
{
long n,nread,header;
nread=0;
do
{
if ((n=read(socketfd, &header, (HEADERSIZE-nread)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"read() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nread+=n;
} while (nread<HEADERSIZE);
nread=0;
printf("\n\nSocketfd: %d: header: %ld\n\n",socketfd,header);
while ((header-nread)>0)
{
if ((n=read(socketfd, &(msg[nread]), (header-nread)))<0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"read() failed [err %d]",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
nread+=n;
}
return(0);
}