/* streamOp.c - sockets */ #include #include #include /*******************************************************************/ /* Quelques operations de lecture/ecriture sur socket */ /* en mode connecte */ /*******************************************************************/ /*------------------------------------------------------------------*/ /* writeLong */ /*------------------------------------------------------------------*/ ssize_t writeLong(int sockfd,const long *l) { long lToWrite = htonl(*l); unsigned char* pt_lToWrite = (unsigned char*)&lToWrite; ssize_t returnValue = 0; size_t nbByteToWrite = sizeof(long); size_t nbByteSent = 0; while (nbByteToWrite!=nbByteSent) { returnValue = write(sockfd,pt_lToWrite+nbByteSent,nbByteToWrite-nbByteSent); if (returnValue==-1 || returnValue==0) return returnValue; nbByteSent += returnValue; } return nbByteSent; } /*------------------------------------------------------------------*/ /* readLong */ /*------------------------------------------------------------------*/ ssize_t readLong(int sockfd, long *l) { long lToRead = 0; unsigned char* pt_lToRead = (unsigned char*)&lToRead; ssize_t returnValue = 0; size_t nbByteToRead = sizeof(long); size_t nbByteArrived = 0; while (nbByteToRead!=nbByteArrived) { returnValue = read(sockfd, pt_lToRead+nbByteArrived, nbByteToRead-nbByteArrived); if (returnValue==-1 || returnValue==0) return returnValue; nbByteArrived += returnValue; } *l=ntohl(lToRead); return nbByteArrived; }