2009年5月1日 星期五

socket的通用函式

int getpeername(int socket, struct sockaddr *restrict address,socklen_t *restrict address_len);
socket代表在本地端代表對方的socket file descriptor
restrict是用來儲存對方的sockaddr結構的資料
address_len表示sockaddr的長度

#include <arpa/inet.h>
int inet_aton(const char *cp, struct in_addr *addr);

把字串形式的ip轉換成網路network address

struct hostent *gethostbyname(const char *name);

struct hostent {
char FAR* h_name;
char FAR* FAR* h_aliases;
short h_addrtype;
short h_length;
char FAR* FAR* h_addr_list;
};

name="tw.yahoo.com"把它轉換成struct hostent裡面有ip的相關資料

ssize_t recvfrom(int socket, void *restrict buffer, size_t length, int flags, struct sockaddr *restrict address, socklen_t *restrict address_len);
有限定資料一定是由address傳送過來的

#include <sys/socket.h>
int getsockname(int socket, struct sockaddr *address, socklen_t *address_len);

如果我們不在呼本地端ip及port 號,可以將本地的op位址填入 INADDR_ANY ,port number 填入 0 ,socket 會自動使用任何一個可以使用的位址,並且填入一個1024~5000的值。

如何得知 socket 幫我們設定的 IP and PORT號~~~~可使用 getsockname()。

參考資料:
UNIX on Windows, Windows X Server, UNIX Porting - Terminal Emulation Software

沒有留言: