errno = EAFNOSUPPORT;
goto sock_err;
}
-
- printf("=== ADDR: %s ===\n", ntohl(__sw_addr->sin_addr.s_addr));
+
+ char str[INET_ADDRSTRLEN];
+
+ inet_ntop(AF_INET, &(__sw_addr->sin_addr), str, INET_ADDRSTRLEN);
+ printf("=== ADDR: %s ===\n", str);
/* Specify the components of the message in an "iovec". */
__iov[0].iov_base = (void *) __buf;
socklen_t *__restrict __addr_len)
{
ssize_t bytes_recv;
+ struct sock_list *list;
+ struct iovec __iov[1];
+ struct msghdr __msgh;
+ struct sockaddr_sw *__sw_addr = (struct sockaddr_sw *) __addr;
+ list = list_elem_from_socket(__fd);
+ if (list != NULL && list->bind_state == STATE_NOTBOUND) {
+ errno = EAFNOSUPPORT;
+ goto sock_err;
+ }
+
/* TODO */
- return bytes_recv;
+ return recvmsg(__fd, &__msgh, 0);
+
+sock_err:
+ return -1;
}
/*
{
ssize_t bytes_sent;
+ /* TODO */
+
return sendmsg(__fd, __message, __flags);
}
/* TODO */
- return bytes_recv;
+ return recvmsg(__fd, __message, __flags);
}
/*
DIE(rc < 0, "sw_bind");
bytes_sent = sw_sendto(sockfd, buffer, BUFSIZ, 0, (struct sockaddr *) &remote_addr, sizeof(remote_addr));
+
+ perror("sw_sendto");
test( bytes_sent >= 0 );
+
}
static void fill_sockaddr_sw(struct sockaddr_sw *local_addr, struct sockaddr_sw *remote_addr, char * local_address, char * hash, char * dest_address)
{
- local_addr->sin_addr.s_addr = htonl((int)local_address);
+ inet_pton(PF_INET, local_address, &(local_addr->sin_addr));
memcpy(&local_addr->sw_hash, hash, sizeof(struct sw_hash));
- remote_addr->sin_addr.s_addr = htonl((int)dest_address);
+ inet_pton(PF_INET, dest_address, &(remote_addr->sin_addr));
memcpy(&remote_addr->sw_hash, hash, sizeof(struct sw_hash));
}