Exemplo n.º 1
0
Arquivo: handles.c Projeto: yuyuvn/ftp
/** PASV command */
void ftp_pasv(Command *cmd, State *state)
{
  if(state->logged_in){
    int ip[4];
    int port;
    char buff[255];
    char *response = "227 Entering Passive Mode (%d,%d,%d,%d,%d,%d)\n";
    port = gen_port();
    getip(state->connection,ip);

    /* Close previous passive socket? */
    close(state->sock_pasv);

    /* Start listening here, but don't accept the connection */
    state->sock_pasv = create_socket(port);
    printf("port: %d\n",port);
    sprintf(buff,response,ip[0],ip[1],ip[2],ip[3],port>>8,port&0xff);
    state->message = buff;
    state->mode = SERVER;
    puts(state->message);

  }else{
Exemplo n.º 2
0
int main(int argc, const char *argv[])
{
    int sock;

    sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_MPTP);
    if (sock < 0) {
        perror("Failed to create socket");
        return -1;
    }

    int size = sizeof(struct sockaddr_mptp) + sizeof(struct mptp_dest);
    struct sockaddr_mptp *saddr = malloc(size);
    memset(saddr, 0, size);

    saddr->count = 1;
    saddr->dests[0].addr = ADDR;
    saddr->dests[0].port = gen_port();

    if (bind(sock, (struct sockaddr *) saddr, size) < 0) {
        perror("Failed to bind socket");
        close(sock);
        return -1;
    }

    char buf[4096];
	sprintf(buf, "Buffer");

#define N 1
    struct iovec iov[N];
    struct msghdr msg;
    int size2 = sizeof(struct sockaddr_mptp) + N * sizeof(struct mptp_dest);
    struct sockaddr_mptp *to = malloc(size2);

    memset(&msg, 0, sizeof(msg));
    memset(&iov, 0, sizeof(iov));
    memset(to, 0, size2);

	int i;
	for (i = 0; i < N; i++) {
		iov[i].iov_base = buf;
		iov[i].iov_len = sizeof(buf);
	}

    to->count = N;
	for (i = 0; i < N; i++) {
		to->dests[i].addr = DADDR;
		to->dests[i].port = 100;
	}

    msg.msg_iov = iov;
    msg.msg_iovlen = N;
    msg.msg_name = to;
    msg.msg_namelen = size2;

    int ret;

	struct timeval tv1, tv2;
	gettimeofday(&tv1, NULL);
	for (i = 0; i < 10000 / N; i++) {
		ret = sendmsg(sock, &msg, sizeof(msg));
		if (ret < 0) {
			perror("Failed to send on socket");
			return -1;
		}
	}
	gettimeofday(&tv2, NULL);

	printf("diff=%ld\n", (tv2.tv_sec - tv1.tv_sec) * 1000 + (tv2.tv_usec - tv1.tv_usec) / 1000);

    if (close(sock) < 0) {
        perror("Failed to close socket");
        return -1;
    }

    free(saddr);
    free(to);
    return 0;
}