关于socket的疑问并发连接的疑问

power0811 2013-04-27 05:18:59
我在socket创建好之后,在while循环外面malloc了一个300M的内存, 那么, 在while True死循环里面, 不断的 epoll_wait的话, 当设置成非阻塞模式, 因为listen 是10, 当有10个并发连接过来的时候,
我在while循环里面检测到连接, 交给accept处理, 然后再走后面的逻辑, 那么这10个链接请求都共享这一块内存么?
如果是的话 该怎么设计让他们分开呢?
...全文
104 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
power0811 2013-04-28
  • 打赏
  • 举报
回复
这样能避免 多个client fd共享一块内存么?
qq120848369 2013-04-27
  • 打赏
  • 举报
回复
data.ptr是epoll_ctl加入epoll集合时赋值的,epoll_wait返回的event里的data.ptr会有你当初epoll_ctl赋值的那个地址。
power0811 2013-04-27
  • 打赏
  • 举报
回复
非常感谢, 不过麻烦能回答的详细点么 呵呵
1, 程序是单进程的, 如果上一个用户还没处理完,epoll会立刻把后面用户的连接请求响应,一起操作那段共享内存么?

2, data.ptr 是在 定义 struct epoll_event ev, events[MAX_EVENTS] 后, ev这个变中的 ptr赋值给 自己定义的结构体么? 在调用epoll_wait时, 将ev这个变量放入 events数组中, 再次循环再取出对么?
qq120848369 2013-04-27
  • 打赏
  • 举报
回复
一个连接一个结构体,注册在struct epoll_event的data.ptr中保存。
power0811 2013-04-27
  • 打赏
  • 举报
回复
程序是单进程的, 如果上一个用户还没处理完,epoll会立刻把后面用户的连接请求响应,一起操作那段共享内存么? 设置成非阻塞是否没什么关系,因为它无法控制两个用户同时操作内存吧
power0811 2013-04-27
  • 打赏
  • 举报
回复
程序是单进程的, 如果上一个用户还没处理完,epoll会立刻把后面用户的连接请求响应,一起操作那段共享内存么? 设置成非阻塞是否没什么关系,因为它无法控制两个用户同时操作内存吧
power0811 2013-04-27
  • 打赏
  • 举报
回复
程序是单进程的, 如果上一个用户还没处理完,epoll会立刻把后面用户的连接请求响应,一起操作那段共享内存么? 设置成非阻塞是否没什么关系,因为它无法控制两个用户同时操作内存吧
max_min_ 2013-04-27
  • 打赏
  • 举报
回复
引用 1 楼 xiaoji0507 的回复:
accept到后开线程或者进程。在子线程/进程里面处理每一条连接。
++ 只有这样处理了, 要不就设置成为非阻塞的也行,处理快点
comwise 2013-04-27
  • 打赏
  • 举报
回复
我认为应该是 毕竟在之前是在进程分配的一块空间 而线程肯定共享块内存,如果单独使用 我建议在线程里面单独分配
xiaoji0507 2013-04-27
  • 打赏
  • 举报
回复
accept到后开线程或者进程。在子线程/进程里面处理每一条连接。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧