Reset a TCP socket connection from application -


how reset accepted socket in application level either io::socket::inet in perl or in c?

there programm binding, listening on tcp port, , accepts client connection, after reads , writes data. if close or shutdown socket, tcp layer gracefully terminates (with fin packet), rather than, i'd generate rst packet.

you didn't specify exact os using. found linux have api call reset tcp connection, have no idea how portable is. way use connect system call on connected socket time family af_unspec.

after have reset socket way possible connect socket again connect call.

int main(int argc, char** argv) {   int fd = socket(af_inet6, sock_stream, 0);    while (1) {     struct sockaddr_in6 sockaddr = {       .sin6_family = af_inet6,       .sin6_port = htons(80),       .sin6_flowinfo = 0,       .sin6_scope_id = 0,     };     struct timespec s = {       .tv_sec = 2,       .tv_nsec = 0,     };      /* connect port 80 on localhost */     inet_pton(af_inet6, "::1", &sockaddr.sin6_addr.s6_addr);     connect(fd, (struct sockaddr*)&sockaddr,sizeof(sockaddr));     nanosleep(&s, null);      /* reset connected socket */     sockaddr.sin6_family = af_unspec;     connect(fd, (struct sockaddr*)&sockaddr,sizeof(sockaddr));     nanosleep(&s, null);   } } 

Comments