int rel_close(int sock) { // an empty packet signifies end of file rel_send(sock,0,0); while(packets_outstanding > 0) { wait_for_ack(sock); } fprintf(stderr,"\nSent EOF. Now in final wait state.\n"); struct timeval t; t.tv_sec = 2; t.tv_usec = 0; setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(t)); int wait_start = current_msec(); // wait for 5 seconds while(current_msec() - wait_start < 5000) { rel_recv(sock,0,0); } close(sock); }
int rel_close(int sock) { fprintf(stderr, "<SHUBHAM>, rel_close called.\n"); fprintf(stderr, "<SHUBHAM>, rel_close: sending close and waiting for ack of close packet(packet_len = 0).\n"); if(user == SENDER){ // an empty packet signifies end of file rel_send(sock,0,0); } fprintf(stderr,"\nSent EOF. Now in final wait state.\n"); fprintf(stderr, "<SHUBHAM>, rel_close: rel_send ended, waiting for 2 more seconds to process close packet.\n"); fprintf(stderr, "<SHUBHAM>, rel_close: exiting\n"); close(sock); }
int rel_close(int sock) { rel_send(sock, 0, 0); // send an empty packet to signify end of file close(sock); }