[分享] 如何取得一个socket的local port number

楼主: mycallmax (阿冠)   2009-05-11 12:49:01
//在单班Project2中会用到
//要回传给Server自己的IP和所使用的Port number
//但由于我们习惯建好socket之后就直接connection
//让connect()自己帮我们找到一个free的port number来bind上去
//所以我们就必须利用getsockname()这个function
//来查询某个socket的local port number
上面是我误解project2在login时要传送的port的讲法,请大家忽略
真正的是要开一个socket并且bind一个port来listen所有欲传送档案的人的连线
所以没有以上的问题,是我搞错了
使用方法:
#include <sys/socket.h>
int getsockname(int sockfd, struct sockaddr *addr, socklen_t *len);
int getpeername(int sockfd, struct sockaddr *addr, socklen_t *len);
这两个function是一对的,getsockname()可以取得local address和local port number
而getpeername()可以取得remote address和remote port number
sockfd: file descriptor of the socket
addr: 和connection时要使用的structure一样
len: the size of the struct sockaddr
Return value: 0 if OK, -1 on error
Example:
//假设我们已经有一个建立好连线的socket,名为sockfd
#include <sys/socket.h> //for those two function
#include <netinet/in.h> //for struct sockaddr_in
struct sockaddr_in local_sockaddr, remote_sockaddr;
socklen_t len;
len=sizeof(struct sockaddr_in);
if(getsockname(sockfd, &local_sockaddr, &len)==-1) {
perror("getsockname");
}
if(getpeername(sockfd, &remote_sockaddr, &len)==-1) {
perror("getpeername");
}
详细内容可参照系程课本p562

Links booklink

Contact Us: admin [ a t ] ucptt.com