man socket:
int socket(int domain, int type, int protocol);
Параметр domain задает "домен" коммуникации; выбирает набор протоколов, которые будут использоваться для коммуникации. Такие наборы описаны в <sys/socket.h>. В настоящее время понимаются такие форматы:
Название Назначение Страница
PF_UNIX,PF_LOCAL Локальная коммуникация unix(7)
PF_INET IPv4, протоколы Интернет ip(7)
man 7 unix:
unix_socket = socket(AF_UNIX, type, 0);
потом bind/connect
man connect:
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
man bind:
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen);
для unix socket структура sockaddr используется эта (man 7 unix):
struct sockaddr_un {
sa_family_t sun_family; /* AF_UNIX */
char sun_path[UNIX_PATH_MAX]; /* pathname */
};
для tcp/ip (man 7 ip):
struct sockaddr_in {
sa_family_t sin_family; /* семейство адресов: AF_INET */
u_int16_t sin_port; /* порт сокета в сетевом порядке байт */
struct in_addr sin_addr; /* адрес в интернете */
};
/* Адрес в интернете. */
struct in_addr {
u_int32_t s_addr; /* адрес сокета в сетевом порядке байт */
};
Теперь вопросы
1. если прога изначально планируется для использования сетевой работы, нахрена горидить огород с разными подключеними?
2. если прога планируется кроссплатформенной, как она будет себя вести там где нет unix sockets? кстати на винде они есть?
ну и ещё куча всяких мелочей

запустить любую прогу через strace -o OUT progname и посмотреть что там происходит и поглядеть что внутри написано, бумс удивлены зачастую.