本文整理汇总了C++中send_fd函数的典型用法代码示例。如果您正苦于以下问题:C++ send_fd函数的具体用法?C++ send_fd怎么用?C++ send_fd使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了send_fd函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: tcp_conn_send
int tcp_conn_send(struct tcp_connection *c)
{
long response[2];
int n;
/* inform TCP main about this new connection */
if (c->state==S_CONN_CONNECTING) {
response[0]=(long)c;
response[1]=ASYNC_CONNECT;
n=send_fd(unix_tcp_sock, response, sizeof(response), c->s);
if (n<=0) {
LM_ERR("Failed to send the socket to main for async connection\n");
goto error;
}
close(c->s);
} else {
response[0]=(long)c;
response[1]=CONN_NEW;
n=send_fd(unix_tcp_sock, response, sizeof(response), c->s);
if (n<=0){
LM_ERR("failed send_fd: %s (%d)\n", strerror(errno), errno);
goto error;
}
}
return 0;
error:
_tcpconn_rm(c);
tcp_connections_no--;
return -1;
}
开发者ID:Danfx,项目名称:opensips,代码行数:31,代码来源:net_tcp.c
示例2: main
int main(int argc, char *argv[])
{
while (1) {
pid_t child;
child = fork();
if (child == -1)
exit(EXIT_FAILURE);
if (child == 0) {
int fd[2];
int i;
if (socketpair(PF_UNIX, SOCK_SEQPACKET, 0, fd) == -1)
goto out_error;
for (i = 0; i < 100; ++i) {
if (send_fd(fd[0], fd[0]) == -1)
goto out_error;
if (send_fd(fd[1], fd[1]) == -1)
goto out_error;
}
close(fd[0]);
close(fd[1]);
goto out;
out_error:
fprintf(stderr, "error: %s\n", strerror(errno));
out:
exit(EXIT_SUCCESS);
}
while (1) {
pid_t kid;
int status;
kid = wait(&status);
if (kid == -1) {
if (errno == ECHILD)
break;
if (errno == EINTR)
continue;
exit(EXIT_FAILURE);
}
if (WIFEXITED(status)) {
if (WEXITSTATUS(status))
exit(WEXITSTATUS(status));
break;
}
}
}
return EXIT_SUCCESS;
}
开发者ID:NoVAHA,项目名称:osf_db,代码行数:58,代码来源:45037_0.c
示例3: kdbus_test_fd_passing
int kdbus_test_fd_passing(struct kdbus_test_env *env)
{
struct kdbus_conn *conn_src, *conn_dst;
const char *str = "stackenblocken";
const struct kdbus_item *item;
struct kdbus_msg *msg;
unsigned int i;
int fds[2];
int ret;
/* create two connections */
conn_src = kdbus_hello(env->buspath, 0, NULL, 0);
conn_dst = kdbus_hello(env->buspath, 0, NULL, 0);
ASSERT_RETURN(conn_src && conn_dst);
/*
* Try to ass the handle of a connection as message payload.
* This must fail.
*/
ret = send_fd(conn_src, conn_dst->id, conn_src->fd);
ASSERT_RETURN(ret == -ELOOP);
ret = send_fd(conn_src, conn_dst->id, conn_dst->fd);
ASSERT_RETURN(ret == -ELOOP);
ret = pipe(fds);
ASSERT_RETURN(ret == 0);
i = write(fds[1], str, strlen(str));
ASSERT_RETURN(i == strlen(str));
ret = send_fd(conn_src, conn_dst->id, fds[0]);
ASSERT_RETURN(ret == 0);
ret = kdbus_msg_recv(conn_dst, &msg);
ASSERT_RETURN(ret == 0);
KDBUS_ITEM_FOREACH(item, msg, items) {
if (item->type == KDBUS_ITEM_FDS) {
char tmp[14];
int nfds = (item->size - KDBUS_ITEM_HEADER_SIZE) /
sizeof(int);
ASSERT_RETURN(nfds == 1);
i = read(item->fds[0], tmp, sizeof(tmp));
ASSERT_RETURN(i == sizeof(tmp));
ASSERT_RETURN(memcmp(tmp, str, sizeof(tmp)) == 0);
close(item->fds[0]);
break;
}
}
return TEST_OK;
}
开发者ID:squiddle,项目名称:kdbus,代码行数:56,代码来源:test-fd.c
示例4: socket_send_sdtio
/*
* sends stdin and stdout over the socket
* in that order, returns 0 on success
*/
static int socket_send_sdtio( int fd ) {
if ( send_fd ( fd, STDIN_FILENO ) < 0 ) {
LOGE ( "sending STDIN failed\n" );
return -1;
}
if ( send_fd ( fd, STDOUT_FILENO ) < 0 ) {
LOGE ( "sending STDOUT failed\n" );
return -1;
}
return 0;
}
开发者ID:abeluck,项目名称:pinentry,代码行数:16,代码来源:pinentry-android.c
示例5: handle_request
void
handle_request(char *buf, int nread, int fd)
{
int newfd;
if (buf[nread-1] != 0) {
snprintf(errmsg, MAXLINE-1,
"request not null terminated: %*.*s\n", nread, nread, buf);
send_err(fd, -1, errmsg);
return;
}
if (buf_args(buf, cli_args) < 0) { /* 将客户进程请求分解成标准argv型的参数表,调用cli_args处理客户进程的参数*/
send_err(fd, -1, errmsg);
return;
}
if ((newfd = open(pathname, oflag)) < 0) { // 打开相应文件
snprintf(errmsg, MAXLINE-1, "can't open %s: %s\n", pathname,
strerror(errno));
send_err(fd, -1, errmsg);
return;
}
if (send_fd(fd, newfd) < 0) /* 经由fd管道将描述符回送给客户进程*/
err_sys("send_fd error");
close(newfd); /* we're done with descriptor */
}
开发者ID:muupu,项目名称:learning_apue,代码行数:25,代码来源:handle_request.c
示例6: do_snapshot
int
do_snapshot(int parent_fd)
{
int fds[2];
struct command_response resp;
long child;
int r;
r = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
if (r < 0)
VG_(tool_panic)((Char *)"error creating socket pair");
child = my_fork();
if (child < 0)
VG_(tool_panic)((Char *)"forking snapshot");
if (child == 0) {
VG_(close)(fds[1]);
VG_(close)(parent_fd);
return fds[0];
}
VG_(close)(fds[0]);
resp.res = 0;
safeish_write(parent_fd, &resp, sizeof(resp));
send_fd(parent_fd, fds[1]);
VG_(close)(fds[1]);
return parent_fd;
}
开发者ID:Grindland,项目名称:ppres,代码行数:26,代码来源:ui.c
示例7: on_set
void on_set(int sfd){
int client_sfd = _accept(sfd);
int index = get_service_index(sfd);
printf("Client requested for service %s\n", services[index].name);
// if (services[index].started == 0){
// int pid = fork();
// if (pid == 0){
// char *cap = (char *)malloc(sizeof(char)*10);
// sprintf(cap, "%d", services[index].capacity);
// if (index == 0){
// execl(services[index].name, services[index].name, services[index].name, cap,"server", services[index+1].name,(char*)0);
// }
// else if (index == MAX_SERVICES -1){
// execl(services[index].name, services[index].name, services[index].name, cap,services[index-1].name, "server",(char*)0);
// }
// else{
// execl(services[index].name, services[index].name, services[index].name, cap,services[index-1].name, services[index+1].name,(char*)0);
// }
// }
// else{
// services[index].unsfd = _accept(services[index].usfd);
// services[index].started = 1;
// }
// }
send_fd(services[index].usfd, client_sfd); // sending the accepted client sfd to the service.
// printf("Sent the fd\n");
}
开发者ID:makalaaneesh,项目名称:3-2,代码行数:31,代码来源:counter.c
示例8: conjuration_service_ipc_server
int conjuration_service_ipc_server(conjuration_diy_tmp *tmp,int socket) {
int fd;
int err = 0;
int flags;
mode_t mode;
ucred creds;
get_local_socket_credentials(socket,&creds);
if(read(socket,&flags,sizeof(flags)) != sizeof(flags) && !err) {
err = errno;
}
if(read(socket,&mode,sizeof(mode)) != sizeof(mode) && !err) {
err = errno;
}
fd = conjuration_diy(flags,mode,creds.uid,creds.gid,tmp);
if(fd < 0) {
err = errno;
}
if(send_fd(socket,fd) < 0 && !err) {
err = errno;
}
if(write(socket,&err,sizeof(err)) != sizeof(err) && !err) {
err = errno;
}
if(fd > 0) {
close(fd);
}
return err;
}
开发者ID:atomicfusion,项目名称:conjuration,代码行数:32,代码来源:service_ipc_server.cpp
示例9: main
int main(){
int pipefd[2];
int fd_to_pass=0;
//创建父子进程之间的管道,文件描述符pipefd[0]和pipefd[1]都是UNIX域套接字
int ret=socketpair(PF_UNIX,SOCK_STREAM,0,pipefd);
assert(ret!=-1);
pid_t pid=fork();
assert(pid>=0);
if(pid==0){
close(pipefd[0]);
fd_to_pass=open("select.c",O_RDONLY);
send_fd(pipefd[1],fd_to_pass);
close(fd_to_pass);
exit(EXIT_SUCCESS);
}
else{
sleep(3);
close(pipefd[1]);
fd_to_pass=recv_fd(pipefd[0]);
char buf[1024];
memset(buf,0,1024);
read(fd_to_pass,buf,1024);
printf("I got fd %d and data %s\n",fd_to_pass,buf);
close(fd_to_pass);
}
}
开发者ID:duanjingjing,项目名称:PAT,代码行数:30,代码来源:transfer_sockfd.c
示例10: request
void request(char *buf, int nread, int fd)
{
int newfd;
if (buf[nread-1] != 0)
{
sprintf(errmsg, "request not null terminated:%*.*s\n", nread, nread, buf);
send_err(fd, -1, errmsg);
return;
}
if (buf_args(buf, cli_args) < 0) {
send_err(fd, -1, errmsg);
return;
}
if ( (newfd = open(pathname, oflag)) < 0)
{
sprintf(errmsg, "can't open %s: %s\n", pathname, strerror(errno));
send_err(fd, -1, errmsg);
return;
}
if (send_fd(fd, newfd) < 0)
err_sys("send_fd error", errno);
close(newfd);
}
开发者ID:clamxyz,项目名称:apue,代码行数:27,代码来源:opend.c
示例11: handle_request
void handle_request(char *buf, int nread, int fd)
{
int newfd;
if (buf[nread - 1] != 0) {
/*
* "%*.*s", m, n, "string"
* total field width is m
* precision is n.
* this manner can limit print max(m, n) chars up to
* max(n, m)
*/
snprintf(errmsg, MAXLINE - 1,
"request not null terminated: %*.*s\n",
nread, nread, buf);
send_err(fd, -1, errmsg);
return;
}
if (buf_args(buf, cli_args) < 0) { /* parse args & set options */
send_err(fd, -1, errmsg);
return;
}
if ((newfd = open(pathname, oflag)) < 0) {
snprintf(errmsg, MAXLINE - 1, "can't open %s: %s\n", pathname,
strerror(errno));
send_err(fd, -1, errmsg);
return;
}
if (send_fd(fd, newfd) < 0) /* send the descriptor */
err_sys("send_fd error");
close(newfd); /* we're done with descriptor */
}
开发者ID:wuzhouhui,项目名称:misc,代码行数:32,代码来源:17-22.c
示例12: main
int main()
{
int socket_fd, client_fd;
struct sockaddr_un server_address;
if ((socket_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
perror("socket()");
return -1;
}
memset(&server_address, 0, sizeof(server_address));
server_address.sun_family = AF_UNIX;
strcpy(server_address.sun_path, "#hax");
server_address.sun_path[0] = 0; // make it abstract
if (bind(socket_fd, (struct sockaddr*)&server_address, sizeof(server_address)) < 0) {
perror("bind()");
return -1;
}
if (listen(socket_fd, 1) != 0) {
perror("listen()");
return -1;
}
if ((client_fd = accept(socket_fd, 0, 0)) == -1) {
perror("accept()");
return -1;
}
int dir_fd = open("/", O_RDONLY);
send_fd(client_fd, dir_fd);
return 0;
}
开发者ID:firebitsbr,项目名称:writeups-1,代码行数:35,代码来源:server.c
示例13: main
int main(int argc,char* argv[])
{
if(argc != 2)
{
printf("error args\n");
return -1;
}
int fds[2];
int ret=socketpair(AF_LOCAL,SOCK_STREAM,0,fds);
if(-1==ret)
{
perror("socketpair");
return -1;
}
if(!fork())
{
close(fds[1]);
int fd;
recv_fd(fds[0],&fd);
printf("i am child,fd is %d\n",fd);
char buf[10]={0};
read(fd,buf,sizeof(buf));
printf("the buf is %s\n",buf);
return 0;
}else{
close(fds[0]);
int fd=open(argv[1],O_RDWR);
printf("i am parent,fd is %d\n",fd);
send_fd(fds[1],fd); //把fd这个描述符 写到fds[1]写描述符中
wait(NULL);
return 0;
}
}
开发者ID:JiayuanDing100,项目名称:Wangdao_test,代码行数:34,代码来源:send_fd.c
示例14: handle_request
void handle_request(char *buf, int nread, int clifd, uid_t uid)
{
int newfd;
if (buf[nread - 1] != 0) {
snprintf(errmsg, MAXLINE - 1,
"request from uid %d not null terminated: %*.*s\n",
uid, nread, nread, buf);
send_err(clifd, -1, errmsg);
return;
}
log_msg("request: %s, from uid %d", buf, uid);
/* parse the arguments, set options */
if (buf_args(buf, cli_args) < 0) {
send_err(clifd, -1, errmsg);
log_msg(errmsg);
return;
}
if ((newfd = open(pathname, oflag)) < 0) {
snprintf(errmsg, MAXLINE - 1, "can't open %s: %s\n",
pathname, strerror(errno));
send_err(clifd, -1, errmsg);
log_msg(errmsg);
return;
}
/* send the desrciptor */
if (send_fd(clifd, newfd) < 0)
log_sys("send_fd error");
log_msg("send fd %d over fd %d for %s", newfd, clifd, pathname);
close(newfd); /* we're done with desrciptor */
}
开发者ID:wuzhouhui,项目名称:misc,代码行数:33,代码来源:17-31.c
示例15: handle_request
void
handle_request(char *buf, int nread, int fd)
{
int newfd;
if (buf[nread-1] != 0) {
snprintf(errmsg, MAXLINE-1,
"request not null terminated: %*.*s\n", nread, nread, buf);
send_err(fd, -1, errmsg);
return;
}
if (buf_args(buf, cli_args) < 0) { /* parse args & set options */
send_err(fd, -1, errmsg);
return;
}
if ((newfd = open(pathname, oflag)) < 0) {
snprintf(errmsg, MAXLINE-1, "can't open %s: %s\n", pathname,
strerror(errno));
send_err(fd, -1, errmsg);
return;
}
if (send_fd(fd, newfd) < 0) /* send the descriptor */
err_sys("send_fd error");
close(newfd); /* we're done with descriptor */
}
开发者ID:BigR-Lab,项目名称:CodeRes_Cpp,代码行数:25,代码来源:request.c
示例16: asroot_open
void
asroot_open()
{
const char* authorized[] = {
"/proc/sys/net/ipv4/ip_forward",
"/proc/net/bonding/[^.][^/]*",
"/proc/self/net/bonding/[^.][^/]*",
#ifdef ENABLE_OLDIES
SYSFS_CLASS_NET "[^.][^/]*/brforward",
SYSFS_CLASS_NET "[^.][^/]*/brport",
SYSFS_CLASS_NET "[^.][^/]*/brif/[^.][^/]*/port_no",
#endif
SYSFS_CLASS_DMI "product_version",
SYSFS_CLASS_DMI "product_serial",
SYSFS_CLASS_DMI "product_name",
SYSFS_CLASS_DMI "bios_version",
SYSFS_CLASS_DMI "sys_vendor",
SYSFS_CLASS_DMI "chassis_asset_tag",
NULL
};
const char **f;
char *file;
int fd, len, rc;
regex_t preg;
must_read(PRIV_PRIVILEGED, &len, sizeof(len));
if ((file = (char *)malloc(len + 1)) == NULL)
fatal("privsep", NULL);
must_read(PRIV_PRIVILEGED, file, len);
file[len] = '\0';
for (f=authorized; *f != NULL; f++) {
if (regcomp(&preg, *f, REG_NOSUB) != 0)
/* Should not happen */
fatal("privsep", "unable to compile a regex");
if (regexec(&preg, file, 0, NULL, 0) == 0) {
regfree(&preg);
break;
}
regfree(&preg);
}
if (*f == NULL) {
log_warnx("privsep", "not authorized to open %s", file);
rc = -1;
must_write(PRIV_PRIVILEGED, &rc, sizeof(int));
free(file);
return;
}
if ((fd = open(file, O_RDONLY)) == -1) {
rc = -1;
must_write(PRIV_PRIVILEGED, &rc, sizeof(int));
free(file);
return;
}
free(file);
must_write(PRIV_PRIVILEGED, &fd, sizeof(int));
send_fd(PRIV_PRIVILEGED, fd);
close(fd);
}
开发者ID:clemensg,项目名称:lldpd,代码行数:59,代码来源:priv-linux.c
示例17: parasite_send_fd
int parasite_send_fd(struct parasite_ctl *ctl, int fd)
{
if (send_fd(ctl->tsock, NULL, 0, fd) < 0) {
pr_perror("Can't send file descriptor");
return -1;
}
return 0;
}
开发者ID:kunalkushwaha,项目名称:crtools,代码行数:8,代码来源:parasite-syscall.c
示例18: send_fd
/**
* eva_pass_fd_send:
* @sender_fd: the file-descriptor allocated with
* eva_pass_fd_make_pair().
* @pass_fd: the file-descriptor to pass.
* @aux_info_len: length of auxiliary information to send with the fd.
* must be nonzero!
* @aux_info_data: auxiliary information to send with the fd.
* @error: optional location to store error at.
*
* Pass a file-descriptor from one process to another
* using a file-descriptor that does not require a path.
*
* This function can fail transiently (if there is no space
* in the message-queue), in which case it returns FALSE
* but does NOT set *error.
*
* If this function returns TRUE, you should close pass_fd immediately.
*
* returns: whether the file-descriptor was passed to the subprocess.
* If this fails, it may set *error, if the error was a serious one
* (for example if the remote side shuts down).
*/
gboolean eva_pass_fd_send (int sender_fd,
int pass_fd,
guint aux_info_len,
const guint8 *aux_info_data,
GError **error)
{
return send_fd (sender_fd, NULL, pass_fd, aux_info_len, aux_info_data, error);
}
开发者ID:novator24,项目名称:libeva,代码行数:31,代码来源:evapassfd.c
示例19: on_accept
int on_accept(int epoll_fd, int listen_sock)
{
int conn_sock;
int channel_fd;
struct sockaddr_in client_addr;
socklen_t client_len = 0;
channel ch;
memset(&client_addr, 0, sizeof(struct sockaddr_in));
while(1) {
if ((conn_sock = accept(listen_sock, (struct sockaddr*) &client_addr, &client_len)) < 0) {
if (errno == EINTR)
continue;
else {
perror("accept failed: ");
return L_HTTP_FAIL;
}
}
break;
}
set_nonblocking(conn_sock);
ch.cmd = HTTP_COMMAND_TRANS_FD;
ch.fd = conn_sock;
if((channel_fd = get_worker_fd()) == L_HTTP_FAIL) {
printf("no worker to use\n");
return L_HTTP_FAIL;
}
if(send_fd(channel_fd, &ch) == L_HTTP_FAIL)
return L_HTTP_FAIL;
close(conn_sock);
return L_HTTP_SUCCESS;
/*sb = generate_socket_buf(conn_sock);
if(sb == NULL) {
perror("not enough memory");
return L_HTTP_FAIL;
}
sb->state = STATE_HTTP_READ;
if(sb_array.size() < MAX_CONNECTION
&& find_socket_buf(conn_sock) == NULL)
sb_array[conn_sock] = sb;
else {
printf("to many connections or using same fd");
return L_HTTP_FAIL;
}
//ev.events = EPOLLIN;
//set_timer(sb->timer, DEFAULT_TIME_LENGTH);
//return epoll_add_event(epoll_fd, EPOLLIN, conn_sock);*/
}
开发者ID:RechardTheGrey,项目名称:little_httpd,代码行数:58,代码来源:http_connection.c
示例20: g_return_val_if_fail
/**
* eva_pass_fd_sendto:
* @sender_fd: the file-descriptor allocated with
* eva_pass_fd_make_sender().
* @path: the location to send to file-descriptor to.
* @pass_fd: the file-descriptor to pass.
* @aux_info_len: length of auxiliary information to send with the fd.
* must be nonzero!
* @aux_info_data: auxiliary information to send with the fd.
* @error: optional location to store error at.
*
* Pass a file-descriptor from one process to a named location.
* The name should match a location where some other process
* has called eva_pass_fd_bind_receiver().
*
* This function can fail transiently (if there is no space
* in the message-queue), in which case it returns FALSE
* but does NOT set *error.
*
* If this function returns TRUE, you should close pass_fd immediately.
*
* returns: whether the file-descriptor was passed to the subprocess.
* If this fails, it may set *error, if the error was a serious one
* (for example if the remote side shuts down).
*/
gboolean eva_pass_fd_sendto (int sender_fd,
const char *path,
int pass_fd,
guint aux_info_len,
const guint8 *aux_info_data,
GError **error)
{
g_return_val_if_fail (path != NULL, FALSE);
return send_fd (sender_fd, path, pass_fd, aux_info_len, aux_info_data, error);
}
开发者ID:novator24,项目名称:libeva,代码行数:35,代码来源:evapassfd.c
注:本文中的send_fd函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论