linux unix sock,Unix-domain-socket详解UDP

共享内存的操作函数

#include

int shmget(key_t key, int size, int shmflg);

int shmctl(int shmid, int cmd, struct shmid_ds *buf);

void *shmat(int shmid, const void *shmaddr, int shmflg);

int shmdt(const void *shmaddr);

Unix域socket通信

#include

struct sockaddr_un

{

unit8_tsun_len;

sa_family_t sun_family;

charsun_path[104];

};

#include

socket操作的相关函数

使用select调用处理多路管道

#include

int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout);

void FD_ZERO(fd_set *fdset);/*initialize the mask pointed to by fdset */

void FD_SET(int fd, fd_set *fdset); /*set the bit, fd, in the mask pointed to by fdset*/

/*isthe bit, fd, set in the mask pointed to by fdset*/

void FD_ISSET(int fd, fd_set *fdset);

void FD_CLR(int fd, fd_set *fdset);

struct timeval{

long tv_sec;

long tv_usec;

};

调用实例

#include

#include

#include

……

int fd1, fd2;

fd_set readset;

fd1= open(“file1”, O_RDONLY);

fd2= open(“file2”, O_RDONLY);

FD_ZERO(&readset);

FD_SET(fd1, &readset);

FD_SET(fd2, &readset);

Switch (select(5, &readset, NULL, NULL, NULL))

{

……

}

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

//#include

//#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define JOSEPH_IPNC_SYS_NAME  "av_server"

#define SOCK_UNIX_VIDEO_STREAM_FILE "/tmp/video1_sock"

#define SOCK_UNIX_VIDEO_STREAM_FILE_SEVER "/tmp/video1_server"

#define SOCK_UNIX_VIDEO_STREAM_FILE_CLIENT "/tmp/video1_client"

struct sockaddr_un server_address_udp;

struct sockaddr_un server_address_client;

extern struct sockaddr_un server_address_udp;

int video_stream_net_func_udp(void)

{

#if 0

int server_sockfd;

//unlink (SOCK_UNIX_VIDEO_STREAM_FILE_SEVER);//delete the file link for the function of bind

server_sockfd = socket (AF_UNIX, SOCK_DGRAM, 0);

server_address_udp.sun_family = AF_UNIX;

//server_address_udp.sin_port=htons(PORT);

strcpy (server_address_udp.sun_path, SOCK_UNIX_VIDEO_STREAM_FILE_SEVER);

joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp_socket_size = sizeof (server_address_udp);

//bind (server_sockfd, (struct sockaddr *)&server_address_udp, server_len);

joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp = 0;

joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp = server_sockfd;

printf("%s %d The udp mode send to jss succeed ,joseph_ipnc_s_socket_fd_udp is %d !\n",__FUNCTION__,__LINE__,joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp);

#else

int client_sockfd, ret;

//struct sockaddr_un pmmanager_addr, pmapi_addr;

client_sockfd = socket(AF_UNIX, SOCK_DGRAM, 0);

if(client_sockfd == -1)

{

perror("cannot create pmapi fd.");

}

unlink(SOCK_UNIX_VIDEO_STREAM_FILE_CLIENT);    //configure pmapi's addr

memset(&server_address_client, 0, sizeof(server_address_client));

server_address_client.sun_family = AF_UNIX;

strcpy(server_address_client.sun_path, SOCK_UNIX_VIDEO_STREAM_FILE_CLIENT);    //bind pmapi_fd to pmapi_addr

ret = bind(client_sockfd, (struct sockaddr*)&server_address_client, SUN_LEN(&server_address_client));

if(ret == -1)

{

perror("bind error.");

}

//configure pmmanager's addr

memset(&server_address_udp, 0, sizeof(server_address_udp));

server_address_udp.sun_family = AF_UNIX;

strcpy(server_address_udp.sun_path, SOCK_UNIX_VIDEO_STREAM_FILE_SEVER);

joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp = 0;

joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp = client_sockfd;

printf("%s %d The udp mode send to jss succeed ,joseph_ipnc_s_socket_fd_udp is %d !\n",__FUNCTION__,__LINE__,joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp);

#endif

return 0;

}

void net_send_stream_first(void *video_buf,int video_length)

{

int s_length;

#if 0

if(video_length <= 8) return;

#else

if(video_length <= 4) return;

#endif

if(joseph_ipnc_s_socket.joseph_ipnc_s_scoket_sta == 1)

{

#if 1

char buf_time[128] = {0};

memset(buf_time,0,128);

get_current_time(buf_time);

printf("%s %d %s send begin time is : \n",__FUNCTION__,__LINE__,buf_time);

printf("%s %d The num is %d ,The buf size is %d !\n",__FUNCTION__,__LINE__,joseph_ipnc_param.joseph_ipnc_network_attr.joseh_send_to_jss_frame_num,video_length);

printf("%s %d joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp is %d \n",__FUNCTION__,__LINE__,joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp);

#endif

#if 0

s_length = send(joseph_ipnc_s_socket.joseph_ipnc_s_scoket_fd, video_buf, video_length, 0);

#else

/*

int sendto ( socket s , const void * msg, int len, unsigned int flags, const struct sockaddr * to , int tolen ) ;

sendto(sockfd,  buffer,  len,  0,  (struct addr*)&addr,  addr_len);¡±

*/

s_length = sendto(joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp, video_buf, video_length, 0,(struct sockaddr*)&server_address_udp,SUN_LEN(&server_address_udp));

#endif

if(s_length <= 0)

{

printf("%s %d The send is err, The length is %d !!! \n",__FUNCTION__,__LINE__,s_length);

close(joseph_ipnc_s_socket.joseph_ipnc_s_scoket_fd);

//close(joseph_ipnc_s_socket.joseph_ipnc_s_socket_fd_udp);

joseph_net_lock();

joseph_ipnc_s_socket.joseph_ipnc_s_scoket_sta = -2;

joseph_net_unlock();

//exit(-2);

}

else

{

//printf("%s %d net_send_stream_first succeed \n",__FUNCTION__,__LINE__);

//do nothing

}

#if 0

memset(buf_time,0,128);

get_current_time(buf_time);

printf("%s %d %s send end time is : \n",__FUNCTION__,__LINE__,buf_time);

#endif

}

else

{

// do nothing

}

}0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值