Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
taosdata
TDengine
提交
9c12e2bf
T
TDengine
项目概览
taosdata
/
TDengine
大约 2 年 前同步成功
通知
1192
Star
22018
Fork
4786
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
1
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
TDengine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
1
Issue
1
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9c12e2bf
编写于
3月 25, 2022
作者:
S
shenglian zhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
start/stop process
上级
abedeb23
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
80 addition
and
87 deletion
+80
-87
source/libs/function/inc/tudfInt.h
source/libs/function/inc/tudfInt.h
+3
-0
source/libs/function/src/tudf.c
source/libs/function/src/tudf.c
+59
-64
source/libs/function/src/udfd.c
source/libs/function/src/udfd.c
+18
-23
未找到文件。
source/libs/function/inc/tudfInt.h
浏览文件 @
9c12e2bf
...
@@ -20,6 +20,9 @@
...
@@ -20,6 +20,9 @@
extern
"C"
{
extern
"C"
{
#endif
#endif
//TODO replaces them with fnDebug
//#define debugPrint(...) taosPrintLog("Function", DEBUG_INFO, 135, __VA_ARGS__)
#define debugPrint(...) {fprintf(stderr, __VA_ARGS__);fprintf(stderr, "\n");}
enum
{
enum
{
UDF_TASK_SETUP
=
0
,
UDF_TASK_SETUP
=
0
,
UDF_TASK_CALL
=
1
,
UDF_TASK_CALL
=
1
,
...
...
source/libs/function/src/tudf.c
浏览文件 @
9c12e2bf
...
@@ -14,17 +14,10 @@
...
@@ -14,17 +14,10 @@
*/
*/
#include "uv.h"
#include "uv.h"
#include "os.h"
#include "os.h"
#include "tlog.h"
#include "tudf.h"
#include "tudf.h"
#include "tudfInt.h"
#include "tudfInt.h"
//TODO replace them with qDebug
#define DEBUG
#ifdef DEBUG
#define debugPrint(...) fprintf(__VA_ARGS__)
#else
#define debugPrint(...)
/**/
#endif
//TODO: when startup, set thread poll size. add it to cfg
//TODO: when startup, set thread poll size. add it to cfg
//TODO: udfd restart when exist or aborts
//TODO: udfd restart when exist or aborts
//TODO: network error processing.
//TODO: network error processing.
...
@@ -179,21 +172,21 @@ void udfTaskQueueMove(SClientUvTaskQueue q, SClientUvTaskQueue n) {
...
@@ -179,21 +172,21 @@ void udfTaskQueueMove(SClientUvTaskQueue q, SClientUvTaskQueue n) {
int32_t
encodeRequest
(
char
**
pBuf
,
int32_t
*
pBufLen
,
SUdfRequest
*
request
)
{
int32_t
encodeRequest
(
char
**
pBuf
,
int32_t
*
pBufLen
,
SUdfRequest
*
request
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"encoding request"
);
debugPrint
(
"%s
"
,
"encoding request"
);
int
len
=
sizeof
(
SUdfRequest
)
-
sizeof
(
void
*
);
int
len
=
sizeof
(
SUdfRequest
)
-
sizeof
(
void
*
);
switch
(
request
->
type
)
{
switch
(
request
->
type
)
{
case
0
:
{
case
UDF_TASK_SETUP
:
{
SUdfSetupRequest
*
setup
=
(
SUdfSetupRequest
*
)
(
request
->
subReq
);
SUdfSetupRequest
*
setup
=
(
SUdfSetupRequest
*
)
(
request
->
subReq
);
len
+=
sizeof
(
SUdfSetupRequest
)
-
1
*
sizeof
(
char
*
)
+
setup
->
pathSize
;
len
+=
sizeof
(
SUdfSetupRequest
)
-
1
*
sizeof
(
char
*
)
+
setup
->
pathSize
;
break
;
break
;
}
}
case
1
:
{
case
UDF_TASK_CALL
:
{
SUdfCallRequest
*
call
=
(
SUdfCallRequest
*
)
(
request
->
subReq
);
SUdfCallRequest
*
call
=
(
SUdfCallRequest
*
)
(
request
->
subReq
);
len
+=
sizeof
(
SUdfCallRequest
)
-
2
*
sizeof
(
char
*
)
+
call
->
inputBytes
+
call
->
stateBytes
;
len
+=
sizeof
(
SUdfCallRequest
)
-
2
*
sizeof
(
char
*
)
+
call
->
inputBytes
+
call
->
stateBytes
;
break
;
break
;
}
}
case
2
:
{
case
UDF_TASK_TEARDOWN
:
{
SUdfTeardownRequest
*
teardown
=
(
SUdfTeardownRequest
*
)
(
request
->
subReq
);
SUdfTeardownRequest
*
teardown
=
(
SUdfTeardownRequest
*
)
(
request
->
subReq
);
len
+=
sizeof
(
SUdfTeardownRequest
);
len
+=
sizeof
(
SUdfTeardownRequest
);
break
;
break
;
...
@@ -214,7 +207,7 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
...
@@ -214,7 +207,7 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
buf
+=
sizeof
(
int8_t
);
buf
+=
sizeof
(
int8_t
);
switch
(
request
->
type
)
{
switch
(
request
->
type
)
{
case
0
:
{
case
UDF_TASK_SETUP
:
{
SUdfSetupRequest
*
setup
=
(
SUdfSetupRequest
*
)
(
request
->
subReq
);
SUdfSetupRequest
*
setup
=
(
SUdfSetupRequest
*
)
(
request
->
subReq
);
memcpy
(
buf
,
setup
->
udfName
,
16
);
memcpy
(
buf
,
setup
->
udfName
,
16
);
buf
+=
16
;
buf
+=
16
;
...
@@ -229,7 +222,7 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
...
@@ -229,7 +222,7 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
break
;
break
;
}
}
case
1
:
{
case
UDF_TASK_CALL
:
{
SUdfCallRequest
*
call
=
(
SUdfCallRequest
*
)
(
request
->
subReq
);
SUdfCallRequest
*
call
=
(
SUdfCallRequest
*
)
(
request
->
subReq
);
*
(
int64_t
*
)
buf
=
call
->
udfHandle
;
*
(
int64_t
*
)
buf
=
call
->
udfHandle
;
buf
+=
sizeof
(
int64_t
);
buf
+=
sizeof
(
int64_t
);
...
@@ -246,7 +239,7 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
...
@@ -246,7 +239,7 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
break
;
break
;
}
}
case
2
:
{
case
UDF_TASK_TEARDOWN
:
{
SUdfTeardownRequest
*
teardown
=
(
SUdfTeardownRequest
*
)
(
request
->
subReq
);
SUdfTeardownRequest
*
teardown
=
(
SUdfTeardownRequest
*
)
(
request
->
subReq
);
*
(
int64_t
*
)
buf
=
teardown
->
udfHandle
;
*
(
int64_t
*
)
buf
=
teardown
->
udfHandle
;
buf
+=
sizeof
(
int64_t
);
buf
+=
sizeof
(
int64_t
);
...
@@ -264,9 +257,9 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
...
@@ -264,9 +257,9 @@ int32_t encodeRequest(char **pBuf, int32_t *pBufLen, SUdfRequest *request) {
}
}
int32_t
decodeRequest
(
char
*
bufMsg
,
int32_t
bufLen
,
SUdfRequest
**
pRequest
)
{
int32_t
decodeRequest
(
char
*
bufMsg
,
int32_t
bufLen
,
SUdfRequest
**
pRequest
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"decoding request"
);
debugPrint
(
"%s
"
,
"decoding request"
);
if
(
*
(
int32_t
*
)
bufMsg
!=
bufLen
)
{
if
(
*
(
int32_t
*
)
bufMsg
!=
bufLen
)
{
debugPrint
(
stderr
,
"%s
\n
"
,
"dequest
request error"
);
debugPrint
(
"%s"
,
"decoding
request error"
);
return
-
1
;
return
-
1
;
}
}
char
*
buf
=
bufMsg
;
char
*
buf
=
bufMsg
;
...
@@ -280,7 +273,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
...
@@ -280,7 +273,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
buf
+=
sizeof
(
int8_t
);
buf
+=
sizeof
(
int8_t
);
switch
(
request
->
type
)
{
switch
(
request
->
type
)
{
case
0
:
{
case
UDF_TASK_SETUP
:
{
SUdfSetupRequest
*
setup
=
malloc
(
sizeof
(
SUdfSetupRequest
));
SUdfSetupRequest
*
setup
=
malloc
(
sizeof
(
SUdfSetupRequest
));
memcpy
(
setup
->
udfName
,
buf
,
16
);
memcpy
(
setup
->
udfName
,
buf
,
16
);
...
@@ -297,7 +290,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
...
@@ -297,7 +290,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
request
->
subReq
=
setup
;
request
->
subReq
=
setup
;
break
;
break
;
}
}
case
1
:
{
case
UDF_TASK_CALL
:
{
SUdfCallRequest
*
call
=
malloc
(
sizeof
(
SUdfCallRequest
));
SUdfCallRequest
*
call
=
malloc
(
sizeof
(
SUdfCallRequest
));
call
->
udfHandle
=
*
(
int64_t
*
)
buf
;
call
->
udfHandle
=
*
(
int64_t
*
)
buf
;
...
@@ -317,7 +310,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
...
@@ -317,7 +310,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
break
;
break
;
}
}
case
2
:
{
case
UDF_TASK_TEARDOWN
:
{
SUdfTeardownRequest
*
teardown
=
malloc
(
sizeof
(
SUdfTeardownRequest
));
SUdfTeardownRequest
*
teardown
=
malloc
(
sizeof
(
SUdfTeardownRequest
));
teardown
->
udfHandle
=
*
(
int64_t
*
)
buf
;
teardown
->
udfHandle
=
*
(
int64_t
*
)
buf
;
...
@@ -328,7 +321,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
...
@@ -328,7 +321,7 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
}
}
if
(
buf
-
bufMsg
!=
bufLen
)
{
if
(
buf
-
bufMsg
!=
bufLen
)
{
debugPrint
(
stderr
,
"%s
\n
"
,
"decode request error"
);
debugPrint
(
"%s
"
,
"decode request error"
);
free
(
request
->
subReq
);
free
(
request
->
subReq
);
free
(
request
);
free
(
request
);
return
-
1
;
return
-
1
;
...
@@ -338,22 +331,22 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
...
@@ -338,22 +331,22 @@ int32_t decodeRequest(char *bufMsg, int32_t bufLen, SUdfRequest **pRequest) {
}
}
int32_t
encodeResponse
(
char
**
pBuf
,
int32_t
*
pBufLen
,
SUdfResponse
*
response
)
{
int32_t
encodeResponse
(
char
**
pBuf
,
int32_t
*
pBufLen
,
SUdfResponse
*
response
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"encoding response"
);
debugPrint
(
"%s
"
,
"encoding response"
);
int32_t
len
=
sizeof
(
SUdfResponse
)
-
sizeof
(
void
*
);
int32_t
len
=
sizeof
(
SUdfResponse
)
-
sizeof
(
void
*
);
switch
(
response
->
type
)
{
switch
(
response
->
type
)
{
case
0
:
{
case
UDF_TASK_SETUP
:
{
len
+=
sizeof
(
SUdfSetupResponse
);
len
+=
sizeof
(
SUdfSetupResponse
);
break
;
break
;
}
}
case
1
:
{
case
UDF_TASK_CALL
:
{
SUdfCallResponse
*
callResp
=
(
SUdfCallResponse
*
)
(
response
->
subRsp
);
SUdfCallResponse
*
callResp
=
(
SUdfCallResponse
*
)
(
response
->
subRsp
);
len
+=
sizeof
(
SUdfCallResponse
)
-
2
*
sizeof
(
char
*
)
+
len
+=
sizeof
(
SUdfCallResponse
)
-
2
*
sizeof
(
char
*
)
+
callResp
->
outputBytes
+
callResp
->
newStateBytes
;
callResp
->
outputBytes
+
callResp
->
newStateBytes
;
break
;
break
;
}
}
case
2
:
{
case
UDF_TASK_TEARDOWN
:
{
len
+=
sizeof
(
SUdfTeardownResponse
);
len
+=
sizeof
(
SUdfTeardownResponse
);
break
;
break
;
}
}
...
@@ -374,13 +367,13 @@ int32_t encodeResponse(char **pBuf, int32_t *pBufLen, SUdfResponse *response) {
...
@@ -374,13 +367,13 @@ int32_t encodeResponse(char **pBuf, int32_t *pBufLen, SUdfResponse *response) {
switch
(
response
->
type
)
{
switch
(
response
->
type
)
{
case
0
:
{
case
UDF_TASK_SETUP
:
{
SUdfSetupResponse
*
setupResp
=
(
SUdfSetupResponse
*
)
(
response
->
subRsp
);
SUdfSetupResponse
*
setupResp
=
(
SUdfSetupResponse
*
)
(
response
->
subRsp
);
*
(
int64_t
*
)
buf
=
setupResp
->
udfHandle
;
*
(
int64_t
*
)
buf
=
setupResp
->
udfHandle
;
buf
+=
sizeof
(
int64_t
);
buf
+=
sizeof
(
int64_t
);
break
;
break
;
}
}
case
1
:
{
case
UDF_TASK_CALL
:
{
SUdfCallResponse
*
callResp
=
(
SUdfCallResponse
*
)
(
response
->
subRsp
);
SUdfCallResponse
*
callResp
=
(
SUdfCallResponse
*
)
(
response
->
subRsp
);
*
(
int32_t
*
)
buf
=
callResp
->
outputBytes
;
*
(
int32_t
*
)
buf
=
callResp
->
outputBytes
;
buf
+=
sizeof
(
int32_t
);
buf
+=
sizeof
(
int32_t
);
...
@@ -393,7 +386,7 @@ int32_t encodeResponse(char **pBuf, int32_t *pBufLen, SUdfResponse *response) {
...
@@ -393,7 +386,7 @@ int32_t encodeResponse(char **pBuf, int32_t *pBufLen, SUdfResponse *response) {
buf
+=
callResp
->
newStateBytes
;
buf
+=
callResp
->
newStateBytes
;
break
;
break
;
}
}
case
2
:
{
case
UDF_TASK_TEARDOWN
:
{
SUdfTeardownResponse
*
teardownResp
=
(
SUdfTeardownResponse
*
)
(
response
->
subRsp
);
SUdfTeardownResponse
*
teardownResp
=
(
SUdfTeardownResponse
*
)
(
response
->
subRsp
);
break
;
break
;
}
}
...
@@ -408,10 +401,10 @@ int32_t encodeResponse(char **pBuf, int32_t *pBufLen, SUdfResponse *response) {
...
@@ -408,10 +401,10 @@ int32_t encodeResponse(char **pBuf, int32_t *pBufLen, SUdfResponse *response) {
}
}
int32_t
decodeResponse
(
char
*
bufMsg
,
int32_t
bufLen
,
SUdfResponse
**
pResponse
)
{
int32_t
decodeResponse
(
char
*
bufMsg
,
int32_t
bufLen
,
SUdfResponse
**
pResponse
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"decoding response"
);
debugPrint
(
"%s
"
,
"decoding response"
);
if
(
*
(
int32_t
*
)
bufMsg
!=
bufLen
)
{
if
(
*
(
int32_t
*
)
bufMsg
!=
bufLen
)
{
debugPrint
(
stderr
,
"%s
\n
"
,
"can not decode response"
);
debugPrint
(
"%s
"
,
"can not decode response"
);
return
-
1
;
return
-
1
;
}
}
char
*
buf
=
bufMsg
;
char
*
buf
=
bufMsg
;
...
@@ -426,14 +419,14 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
...
@@ -426,14 +419,14 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
buf
+=
sizeof
(
int32_t
);
buf
+=
sizeof
(
int32_t
);
switch
(
rsp
->
type
)
{
switch
(
rsp
->
type
)
{
case
0
:
{
case
UDF_TASK_SETUP
:
{
SUdfSetupResponse
*
setupRsp
=
(
SUdfSetupResponse
*
)
malloc
(
sizeof
(
SUdfSetupResponse
));
SUdfSetupResponse
*
setupRsp
=
(
SUdfSetupResponse
*
)
malloc
(
sizeof
(
SUdfSetupResponse
));
setupRsp
->
udfHandle
=
*
(
int64_t
*
)
buf
;
setupRsp
->
udfHandle
=
*
(
int64_t
*
)
buf
;
buf
+=
sizeof
(
int64_t
);
buf
+=
sizeof
(
int64_t
);
rsp
->
subRsp
=
(
char
*
)
setupRsp
;
rsp
->
subRsp
=
(
char
*
)
setupRsp
;
break
;
break
;
}
}
case
1
:
{
case
UDF_TASK_CALL
:
{
SUdfCallResponse
*
callRsp
=
(
SUdfCallResponse
*
)
malloc
(
sizeof
(
SUdfCallResponse
));
SUdfCallResponse
*
callRsp
=
(
SUdfCallResponse
*
)
malloc
(
sizeof
(
SUdfCallResponse
));
callRsp
->
outputBytes
=
*
(
int32_t
*
)
buf
;
callRsp
->
outputBytes
=
*
(
int32_t
*
)
buf
;
buf
+=
sizeof
(
int32_t
);
buf
+=
sizeof
(
int32_t
);
...
@@ -450,7 +443,7 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
...
@@ -450,7 +443,7 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
rsp
->
subRsp
=
callRsp
;
rsp
->
subRsp
=
callRsp
;
break
;
break
;
}
}
case
2
:
{
case
UDF_TASK_TEARDOWN
:
{
SUdfTeardownResponse
*
teardownRsp
=
(
SUdfTeardownResponse
*
)
malloc
(
sizeof
(
SUdfTeardownResponse
));
SUdfTeardownResponse
*
teardownRsp
=
(
SUdfTeardownResponse
*
)
malloc
(
sizeof
(
SUdfTeardownResponse
));
rsp
->
subRsp
=
teardownRsp
;
rsp
->
subRsp
=
teardownRsp
;
break
;
break
;
...
@@ -459,7 +452,7 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
...
@@ -459,7 +452,7 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
break
;
break
;
}
}
if
(
buf
-
bufMsg
!=
bufLen
)
{
if
(
buf
-
bufMsg
!=
bufLen
)
{
debugPrint
(
stderr
,
"%s
\n
"
,
"can not decode response"
);
debugPrint
(
"%s
"
,
"can not decode response"
);
free
(
rsp
->
subRsp
);
free
(
rsp
->
subRsp
);
free
(
rsp
);
free
(
rsp
);
return
-
1
;
return
-
1
;
...
@@ -469,8 +462,9 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
...
@@ -469,8 +462,9 @@ int32_t decodeResponse(char *bufMsg, int32_t bufLen, SUdfResponse **pResponse) {
}
}
void
onUdfdExit
(
uv_process_t
*
req
,
int64_t
exit_status
,
int
term_signal
)
{
void
onUdfdExit
(
uv_process_t
*
req
,
int64_t
exit_status
,
int
term_signal
)
{
debugPrint
(
stderr
,
"Process exited with status %"
PRId64
", signal %d
\n
"
,
exit_status
,
term_signal
);
debugPrint
(
"Process exited with status %"
PRId64
", signal %d
"
,
exit_status
,
term_signal
);
uv_close
((
uv_handle_t
*
)
req
,
NULL
);
uv_close
((
uv_handle_t
*
)
req
,
NULL
);
//TODO: restart the udfd process
}
}
void
onUdfcPipeClose
(
uv_handle_t
*
handle
)
{
void
onUdfcPipeClose
(
uv_handle_t
*
handle
)
{
...
@@ -488,7 +482,7 @@ void onUdfcPipeClose(uv_handle_t *handle) {
...
@@ -488,7 +482,7 @@ void onUdfcPipeClose(uv_handle_t *handle) {
}
}
int32_t
udfcGetUvTaskResponseResult
(
SClientUdfTask
*
task
,
SClientUvTaskNode
*
uvTask
)
{
int32_t
udfcGetUvTaskResponseResult
(
SClientUdfTask
*
task
,
SClientUvTaskNode
*
uvTask
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"get uv task result"
);
debugPrint
(
"%s
"
,
"get uv task result"
);
if
(
uvTask
->
type
==
UV_TASK_REQ_RSP
)
{
if
(
uvTask
->
type
==
UV_TASK_REQ_RSP
)
{
if
(
uvTask
->
rspBuf
.
base
!=
NULL
)
{
if
(
uvTask
->
rspBuf
.
base
!=
NULL
)
{
SUdfResponse
*
rsp
;
SUdfResponse
*
rsp
;
...
@@ -497,13 +491,13 @@ int32_t udfcGetUvTaskResponseResult(SClientUdfTask *task, SClientUvTaskNode *uvT
...
@@ -497,13 +491,13 @@ int32_t udfcGetUvTaskResponseResult(SClientUdfTask *task, SClientUvTaskNode *uvT
switch
(
task
->
type
)
{
switch
(
task
->
type
)
{
case
UDF_TASK_SETUP
:
{
case
UDF_TASK_SETUP
:
{
//TODO: copy
//TODO: copy
or not
task
->
_setup
.
rsp
=
*
(
SUdfSetupResponse
*
)
(
rsp
->
subRsp
);
task
->
_setup
.
rsp
=
*
(
SUdfSetupResponse
*
)
(
rsp
->
subRsp
);
break
;
break
;
}
}
case
UDF_TASK_CALL
:
{
case
UDF_TASK_CALL
:
{
task
->
_call
.
rsp
=
*
(
SUdfCallResponse
*
)
(
rsp
->
subRsp
);
task
->
_call
.
rsp
=
*
(
SUdfCallResponse
*
)
(
rsp
->
subRsp
);
//TODO: copy
//TODO: copy
or not
break
;
break
;
}
}
case
UDF_TASK_TEARDOWN
:
{
case
UDF_TASK_TEARDOWN
:
{
...
@@ -532,7 +526,7 @@ int32_t udfcGetUvTaskResponseResult(SClientUdfTask *task, SClientUvTaskNode *uvT
...
@@ -532,7 +526,7 @@ int32_t udfcGetUvTaskResponseResult(SClientUdfTask *task, SClientUvTaskNode *uvT
}
}
void
udfcAllocateBuffer
(
uv_handle_t
*
handle
,
size_t
suggestedSize
,
uv_buf_t
*
buf
)
{
void
udfcAllocateBuffer
(
uv_handle_t
*
handle
,
size_t
suggestedSize
,
uv_buf_t
*
buf
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"client allocate buffer to receive from pipe"
);
debugPrint
(
"%s
"
,
"client allocate buffer to receive from pipe"
);
SClientUvConn
*
conn
=
handle
->
data
;
SClientUvConn
*
conn
=
handle
->
data
;
SClientConnBuf
*
connBuf
=
&
conn
->
readBuf
;
SClientConnBuf
*
connBuf
=
&
conn
->
readBuf
;
...
@@ -565,7 +559,7 @@ void udfcAllocateBuffer(uv_handle_t *handle, size_t suggestedSize, uv_buf_t *buf
...
@@ -565,7 +559,7 @@ void udfcAllocateBuffer(uv_handle_t *handle, size_t suggestedSize, uv_buf_t *buf
}
}
}
}
debugPrint
(
stdout
,
"
\t
conn buf cap - len - total : %d - %d - %d
\n
"
,
connBuf
->
cap
,
connBuf
->
len
,
connBuf
->
total
);
debugPrint
(
"
\t
conn buf cap - len - total : %d - %d - %d
"
,
connBuf
->
cap
,
connBuf
->
len
,
connBuf
->
total
);
}
}
...
@@ -621,7 +615,7 @@ void udfcUvHandleError(SClientUvConn *conn) {
...
@@ -621,7 +615,7 @@ void udfcUvHandleError(SClientUvConn *conn) {
}
}
void
onUdfcRead
(
uv_stream_t
*
client
,
ssize_t
nread
,
const
uv_buf_t
*
buf
)
{
void
onUdfcRead
(
uv_stream_t
*
client
,
ssize_t
nread
,
const
uv_buf_t
*
buf
)
{
debugPrint
(
stdout
,
"%s, nread: %zd
\n
"
,
"client read from pipe"
,
nread
);
debugPrint
(
"%s, nread: %zd
"
,
"client read from pipe"
,
nread
);
if
(
nread
==
0
)
return
;
if
(
nread
==
0
)
return
;
SClientUvConn
*
conn
=
client
->
data
;
SClientUvConn
*
conn
=
client
->
data
;
...
@@ -634,7 +628,7 @@ void onUdfcRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
...
@@ -634,7 +628,7 @@ void onUdfcRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
}
}
if
(
nread
<
0
)
{
if
(
nread
<
0
)
{
debugPrint
(
stderr
,
"
\t
client read error: %s
\n
"
,
uv_strerror
(
nread
));
debugPrint
(
"
\t
client read error: %s
"
,
uv_strerror
(
nread
));
if
(
nread
==
UV_EOF
)
{
if
(
nread
==
UV_EOF
)
{
//TODO:
//TODO:
}
}
...
@@ -644,7 +638,7 @@ void onUdfcRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
...
@@ -644,7 +638,7 @@ void onUdfcRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
}
}
void
onUdfClientWrite
(
uv_write_t
*
write
,
int
status
)
{
void
onUdfClientWrite
(
uv_write_t
*
write
,
int
status
)
{
debugPrint
(
stderr
,
"%s
\n
"
,
"after writing to pipe"
);
debugPrint
(
"%s
"
,
"after writing to pipe"
);
SClientUvTaskNode
*
uvTask
=
write
->
data
;
SClientUvTaskNode
*
uvTask
=
write
->
data
;
if
(
status
==
0
)
{
if
(
status
==
0
)
{
uv_pipe_t
*
pipe
=
uvTask
->
pipe
;
uv_pipe_t
*
pipe
=
uvTask
->
pipe
;
...
@@ -653,7 +647,7 @@ void onUdfClientWrite(uv_write_t *write, int status) {
...
@@ -653,7 +647,7 @@ void onUdfClientWrite(uv_write_t *write, int status) {
}
else
{
}
else
{
//TODO Log error;
//TODO Log error;
}
}
debugPrint
(
stdout
,
"
\t
length:%zu
\n
"
,
uvTask
->
reqBuf
.
len
);
debugPrint
(
"
\t
length:%zu
"
,
uvTask
->
reqBuf
.
len
);
free
(
write
);
free
(
write
);
free
(
uvTask
->
reqBuf
.
base
);
free
(
uvTask
->
reqBuf
.
base
);
}
}
...
@@ -707,7 +701,7 @@ int32_t createUdfcUvTask(SClientUdfTask *task, int8_t uvTaskType, SClientUvTaskN
...
@@ -707,7 +701,7 @@ int32_t createUdfcUvTask(SClientUdfTask *task, int8_t uvTaskType, SClientUvTaskN
}
}
int32_t
queueUvUdfTask
(
SClientUvTaskNode
*
uvTask
)
{
int32_t
queueUvUdfTask
(
SClientUvTaskNode
*
uvTask
)
{
debugPrint
(
stdout
,
"%s, %d
\n
"
,
"queue uv task"
,
uvTask
->
type
);
debugPrint
(
"%s, %d
"
,
"queue uv task"
,
uvTask
->
type
);
uv_mutex_lock
(
&
gUdfTaskQueueMutex
);
uv_mutex_lock
(
&
gUdfTaskQueueMutex
);
udfTaskQueueInsertTail
(
gUdfTaskQueue
,
uvTask
);
udfTaskQueueInsertTail
(
gUdfTaskQueue
,
uvTask
);
...
@@ -721,7 +715,7 @@ int32_t queueUvUdfTask(SClientUvTaskNode *uvTask) {
...
@@ -721,7 +715,7 @@ int32_t queueUvUdfTask(SClientUvTaskNode *uvTask) {
}
}
int32_t
startUvUdfTask
(
SClientUvTaskNode
*
uvTask
)
{
int32_t
startUvUdfTask
(
SClientUvTaskNode
*
uvTask
)
{
debugPrint
(
stdout
,
"%s, type %d
\n
"
,
"start uv task "
,
uvTask
->
type
);
debugPrint
(
"%s, type %d
"
,
"start uv task "
,
uvTask
->
type
);
switch
(
uvTask
->
type
)
{
switch
(
uvTask
->
type
)
{
case
UV_TASK_CONNECT
:
{
case
UV_TASK_CONNECT
:
{
uv_pipe_t
*
pipe
=
malloc
(
sizeof
(
uv_pipe_t
));
uv_pipe_t
*
pipe
=
malloc
(
sizeof
(
uv_pipe_t
));
...
@@ -790,20 +784,21 @@ void udfStopAsyncCb(uv_async_t *async) {
...
@@ -790,20 +784,21 @@ void udfStopAsyncCb(uv_async_t *async) {
void
startUdfd
(
void
*
argsThread
)
{
void
startUdfd
(
void
*
argsThread
)
{
uv_loop_init
(
&
gUdfdLoop
);
uv_loop_init
(
&
gUdfdLoop
);
// uv_process_options_t options;
//TODO: path
// static char path[256] = {0};
uv_process_options_t
options
;
// size_t cwdSize;
static
char
path
[
256
]
=
{
0
};
// uv_cwd(path, &cwdSize);
size_t
cwdSize
;
// strcat(path, "/udfd");
uv_cwd
(
path
,
&
cwdSize
);
// char* args[2] = {path, NULL};
strcat
(
path
,
"./udfd"
);
// options.args = args;
char
*
args
[
2
]
=
{
path
,
NULL
};
// options.file = path;
options
.
args
=
args
;
// options.exit_cb = onUdfdExit;
options
.
file
=
path
;
//
options
.
exit_cb
=
onUdfdExit
;
// int err = uv_spawn(&gUdfdLoop, &gUdfdProcess, &options);
// if (err != 0) {
int
err
=
uv_spawn
(
&
gUdfdLoop
,
&
gUdfdProcess
,
&
options
);
// debugPrint(stderr, "can not spawn udfd. error: %s", uv_strerror(err));
if
(
err
!=
0
)
{
// }
debugPrint
(
"can not spawn udfd. path: %s, error: %s"
,
path
,
uv_strerror
(
err
));
}
uv_async_init
(
&
gUdfdLoop
,
&
gUdfLoopTaskAync
,
udfClientAsyncCb
);
uv_async_init
(
&
gUdfdLoop
,
&
gUdfLoopTaskAync
,
udfClientAsyncCb
);
uv_async_init
(
&
gUdfdLoop
,
&
gUdfLoopStopAsync
,
udfStopAsyncCb
);
uv_async_init
(
&
gUdfdLoop
,
&
gUdfLoopStopAsync
,
udfStopAsyncCb
);
...
@@ -822,7 +817,7 @@ int32_t startUdfService() {
...
@@ -822,7 +817,7 @@ int32_t startUdfService() {
int32_t
stopUdfService
()
{
int32_t
stopUdfService
()
{
uv_barrier_destroy
(
&
gUdfInitBarrier
);
uv_barrier_destroy
(
&
gUdfInitBarrier
);
//
uv_process_kill(&gUdfdProcess, SIGINT);
uv_process_kill
(
&
gUdfdProcess
,
SIGINT
);
uv_async_send
(
&
gUdfLoopStopAsync
);
uv_async_send
(
&
gUdfLoopStopAsync
);
uv_mutex_destroy
(
&
gUdfTaskQueueMutex
);
uv_mutex_destroy
(
&
gUdfTaskQueueMutex
);
uv_thread_join
(
&
gUdfLoopThread
);
uv_thread_join
(
&
gUdfLoopThread
);
...
@@ -844,7 +839,7 @@ int32_t udfcRunUvTask(SClientUdfTask *task, int8_t uvTaskType) {
...
@@ -844,7 +839,7 @@ int32_t udfcRunUvTask(SClientUdfTask *task, int8_t uvTaskType) {
}
}
int32_t
setupUdf
(
SUdfInfo
*
udfInfo
,
UdfHandle
*
handle
)
{
int32_t
setupUdf
(
SUdfInfo
*
udfInfo
,
UdfHandle
*
handle
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"client setup udf"
);
debugPrint
(
"%s
"
,
"client setup udf"
);
SClientUdfTask
*
task
=
malloc
(
sizeof
(
SClientUdfTask
));
SClientUdfTask
*
task
=
malloc
(
sizeof
(
SClientUdfTask
));
task
->
errCode
=
0
;
task
->
errCode
=
0
;
task
->
session
=
malloc
(
sizeof
(
SUdfUvSession
));
task
->
session
=
malloc
(
sizeof
(
SUdfUvSession
));
...
@@ -875,7 +870,7 @@ int32_t setupUdf(SUdfInfo *udfInfo, UdfHandle *handle) {
...
@@ -875,7 +870,7 @@ int32_t setupUdf(SUdfInfo *udfInfo, UdfHandle *handle) {
int32_t
callUdf
(
UdfHandle
handle
,
int8_t
step
,
char
*
state
,
int32_t
stateSize
,
SUdfDataBlock
input
,
char
**
newState
,
int32_t
callUdf
(
UdfHandle
handle
,
int8_t
step
,
char
*
state
,
int32_t
stateSize
,
SUdfDataBlock
input
,
char
**
newState
,
int32_t
*
newStateSize
,
SUdfDataBlock
*
output
)
{
int32_t
*
newStateSize
,
SUdfDataBlock
*
output
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"client call udf"
);
debugPrint
(
"%s
"
,
"client call udf"
);
SClientUdfTask
*
task
=
malloc
(
sizeof
(
SClientUdfTask
));
SClientUdfTask
*
task
=
malloc
(
sizeof
(
SClientUdfTask
));
task
->
errCode
=
0
;
task
->
errCode
=
0
;
...
@@ -904,7 +899,7 @@ int32_t callUdf(UdfHandle handle, int8_t step, char *state, int32_t stateSize, S
...
@@ -904,7 +899,7 @@ int32_t callUdf(UdfHandle handle, int8_t step, char *state, int32_t stateSize, S
}
}
int32_t
teardownUdf
(
UdfHandle
handle
)
{
int32_t
teardownUdf
(
UdfHandle
handle
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"client teardown udf"
);
debugPrint
(
"%s
"
,
"client teardown udf"
);
SClientUdfTask
*
task
=
malloc
(
sizeof
(
SClientUdfTask
));
SClientUdfTask
*
task
=
malloc
(
sizeof
(
SClientUdfTask
));
task
->
errCode
=
0
;
task
->
errCode
=
0
;
...
...
source/libs/function/src/udfd.c
浏览文件 @
9c12e2bf
...
@@ -15,16 +15,11 @@
...
@@ -15,16 +15,11 @@
#include "uv.h"
#include "uv.h"
#include "os.h"
#include "os.h"
#include "tlog.h"
#include "tudf.h"
#include "tudf.h"
#include "tudfInt.h"
#include "tudfInt.h"
//TODO replaces them with qDebug
#define DEBUG
#ifdef DEBUG
#define debugPrint(...) fprintf(__VA_ARGS__)
#else
#define debugPrint(...)
/**/
#endif
static
uv_loop_t
*
loop
;
static
uv_loop_t
*
loop
;
...
@@ -66,14 +61,14 @@ void udfdProcessRequest(uv_work_t *req) {
...
@@ -66,14 +61,14 @@ void udfdProcessRequest(uv_work_t *req) {
switch
(
request
->
type
)
{
switch
(
request
->
type
)
{
case
UDF_TASK_SETUP
:
{
case
UDF_TASK_SETUP
:
{
debugPrint
(
stdout
,
"%s
\n
"
,
"process setup request"
);
debugPrint
(
"%s
"
,
"process setup request"
);
SUdf
*
udf
=
malloc
(
sizeof
(
SUdf
));
SUdf
*
udf
=
malloc
(
sizeof
(
SUdf
));
udf
->
refCount
=
0
;
udf
->
refCount
=
0
;
SUdfSetupRequest
*
setup
=
request
->
subReq
;
SUdfSetupRequest
*
setup
=
request
->
subReq
;
strcpy
(
udf
->
name
,
setup
->
udfName
);
strcpy
(
udf
->
name
,
setup
->
udfName
);
int
err
=
uv_dlopen
(
setup
->
path
,
&
udf
->
lib
);
int
err
=
uv_dlopen
(
setup
->
path
,
&
udf
->
lib
);
if
(
err
!=
0
)
{
if
(
err
!=
0
)
{
debugPrint
(
stderr
,
"can not load library %s. error: %s"
,
setup
->
path
,
uv_strerror
(
err
));
debugPrint
(
"can not load library %s. error: %s"
,
setup
->
path
,
uv_strerror
(
err
));
//TODO set error
//TODO set error
}
}
...
@@ -109,7 +104,7 @@ void udfdProcessRequest(uv_work_t *req) {
...
@@ -109,7 +104,7 @@ void udfdProcessRequest(uv_work_t *req) {
}
}
case
UDF_TASK_CALL
:
{
case
UDF_TASK_CALL
:
{
debugPrint
(
stdout
,
"%s
\n
"
,
"process call request"
);
debugPrint
(
"%s
"
,
"process call request"
);
SUdfCallRequest
*
call
=
request
->
subReq
;
SUdfCallRequest
*
call
=
request
->
subReq
;
SUdfHandle
*
handle
=
(
SUdfHandle
*
)
(
call
->
udfHandle
);
SUdfHandle
*
handle
=
(
SUdfHandle
*
)
(
call
->
udfHandle
);
SUdf
*
udf
=
handle
->
udf
;
SUdf
*
udf
=
handle
->
udf
;
...
@@ -146,7 +141,7 @@ void udfdProcessRequest(uv_work_t *req) {
...
@@ -146,7 +141,7 @@ void udfdProcessRequest(uv_work_t *req) {
break
;
break
;
}
}
case
UDF_TASK_TEARDOWN
:
{
case
UDF_TASK_TEARDOWN
:
{
debugPrint
(
stdout
,
"%s
\n
"
,
"process teardown request"
);
debugPrint
(
"%s
"
,
"process teardown request"
);
SUdfTeardownRequest
*
teardown
=
request
->
subReq
;
SUdfTeardownRequest
*
teardown
=
request
->
subReq
;
SUdfHandle
*
handle
=
(
SUdfHandle
*
)
(
teardown
->
udfHandle
);
SUdfHandle
*
handle
=
(
SUdfHandle
*
)
(
teardown
->
udfHandle
);
...
@@ -186,12 +181,12 @@ void udfdProcessRequest(uv_work_t *req) {
...
@@ -186,12 +181,12 @@ void udfdProcessRequest(uv_work_t *req) {
}
}
void
udfdOnWrite
(
uv_write_t
*
req
,
int
status
)
{
void
udfdOnWrite
(
uv_write_t
*
req
,
int
status
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"after writing to pipe"
);
debugPrint
(
"%s
"
,
"after writing to pipe"
);
if
(
status
<
0
)
{
if
(
status
<
0
)
{
debugPrint
(
stderr
,
"Write error %s
\n
"
,
uv_err_name
(
status
));
debugPrint
(
"Write error %s
"
,
uv_err_name
(
status
));
}
}
SUvUdfWork
*
work
=
(
SUvUdfWork
*
)
req
->
data
;
SUvUdfWork
*
work
=
(
SUvUdfWork
*
)
req
->
data
;
debugPrint
(
stdout
,
"
\t
length: %zu
\n
"
,
work
->
output
.
len
);
debugPrint
(
"
\t
length: %zu
"
,
work
->
output
.
len
);
free
(
work
->
output
.
base
);
free
(
work
->
output
.
base
);
free
(
work
);
free
(
work
);
free
(
req
);
free
(
req
);
...
@@ -199,7 +194,7 @@ void udfdOnWrite(uv_write_t *req, int status) {
...
@@ -199,7 +194,7 @@ void udfdOnWrite(uv_write_t *req, int status) {
void
udfdSendResponse
(
uv_work_t
*
work
,
int
status
)
{
void
udfdSendResponse
(
uv_work_t
*
work
,
int
status
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"send response"
);
debugPrint
(
"%s
"
,
"send response"
);
SUvUdfWork
*
udfWork
=
(
SUvUdfWork
*
)
(
work
->
data
);
SUvUdfWork
*
udfWork
=
(
SUvUdfWork
*
)
(
work
->
data
);
uv_write_t
*
write_req
=
malloc
(
sizeof
(
uv_write_t
));
uv_write_t
*
write_req
=
malloc
(
sizeof
(
uv_write_t
));
...
@@ -210,7 +205,7 @@ void udfdSendResponse(uv_work_t *work, int status) {
...
@@ -210,7 +205,7 @@ void udfdSendResponse(uv_work_t *work, int status) {
}
}
void
udfdAllocBuffer
(
uv_handle_t
*
handle
,
size_t
suggestedSize
,
uv_buf_t
*
buf
)
{
void
udfdAllocBuffer
(
uv_handle_t
*
handle
,
size_t
suggestedSize
,
uv_buf_t
*
buf
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"allocate buffer for read"
);
debugPrint
(
"%s
"
,
"allocate buffer for read"
);
SUdfdUvConn
*
ctx
=
handle
->
data
;
SUdfdUvConn
*
ctx
=
handle
->
data
;
int32_t
msgHeadSize
=
sizeof
(
int32_t
)
+
sizeof
(
int64_t
);
int32_t
msgHeadSize
=
sizeof
(
int32_t
)
+
sizeof
(
int64_t
);
if
(
ctx
->
inputCap
==
0
)
{
if
(
ctx
->
inputCap
==
0
)
{
...
@@ -240,7 +235,7 @@ void udfdAllocBuffer(uv_handle_t *handle, size_t suggestedSize, uv_buf_t *buf) {
...
@@ -240,7 +235,7 @@ void udfdAllocBuffer(uv_handle_t *handle, size_t suggestedSize, uv_buf_t *buf) {
buf
->
len
=
0
;
buf
->
len
=
0
;
}
}
}
}
debugPrint
(
stdout
,
"
\t
input buf cap - len - total : %d - %d - %d
\n
"
,
ctx
->
inputCap
,
ctx
->
inputLen
,
ctx
->
inputTotal
);
debugPrint
(
"
\t
input buf cap - len - total : %d - %d - %d
"
,
ctx
->
inputCap
,
ctx
->
inputLen
,
ctx
->
inputTotal
);
}
}
...
@@ -279,7 +274,7 @@ void udfdUvHandleError(SUdfdUvConn *conn) {
...
@@ -279,7 +274,7 @@ void udfdUvHandleError(SUdfdUvConn *conn) {
}
}
void
udfdPipeRead
(
uv_stream_t
*
client
,
ssize_t
nread
,
const
uv_buf_t
*
buf
)
{
void
udfdPipeRead
(
uv_stream_t
*
client
,
ssize_t
nread
,
const
uv_buf_t
*
buf
)
{
debugPrint
(
stdout
,
"%s, nread: %zd
\n
"
,
"read from pipe"
,
nread
);
debugPrint
(
"%s, nread: %zd
"
,
"read from pipe"
,
nread
);
if
(
nread
==
0
)
return
;
if
(
nread
==
0
)
return
;
...
@@ -296,7 +291,7 @@ void udfdPipeRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
...
@@ -296,7 +291,7 @@ void udfdPipeRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
}
}
if
(
nread
<
0
)
{
if
(
nread
<
0
)
{
debugPrint
(
stderr
,
"Read error %s
\n
"
,
uv_err_name
(
nread
));
debugPrint
(
"Read error %s
"
,
uv_err_name
(
nread
));
if
(
nread
==
UV_EOF
)
{
if
(
nread
==
UV_EOF
)
{
//TODO check more when close
//TODO check more when close
}
else
{
}
else
{
...
@@ -306,7 +301,7 @@ void udfdPipeRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
...
@@ -306,7 +301,7 @@ void udfdPipeRead(uv_stream_t *client, ssize_t nread, const uv_buf_t *buf) {
}
}
void
udfdOnNewConnection
(
uv_stream_t
*
server
,
int
status
)
{
void
udfdOnNewConnection
(
uv_stream_t
*
server
,
int
status
)
{
debugPrint
(
stdout
,
"%s
\n
"
,
"on new connection"
);
debugPrint
(
"%s
"
,
"on new connection"
);
if
(
status
<
0
)
{
if
(
status
<
0
)
{
// TODO
// TODO
return
;
return
;
...
@@ -335,7 +330,7 @@ void removeListeningPipe(int sig) {
...
@@ -335,7 +330,7 @@ void removeListeningPipe(int sig) {
}
}
int
main
()
{
int
main
()
{
debugPrint
(
stderr
,
"libuv version: %x
\n
"
,
UV_VERSION_HEX
);
debugPrint
(
"libuv version: %x
"
,
UV_VERSION_HEX
);
loop
=
uv_default_loop
();
loop
=
uv_default_loop
();
uv_fs_t
req
;
uv_fs_t
req
;
...
@@ -348,12 +343,12 @@ int main() {
...
@@ -348,12 +343,12 @@ int main() {
int
r
;
int
r
;
if
((
r
=
uv_pipe_bind
(
&
server
,
"udf.sock"
)))
{
if
((
r
=
uv_pipe_bind
(
&
server
,
"udf.sock"
)))
{
debugPrint
(
stderr
,
"Bind error %s
\n
"
,
uv_err_name
(
r
));
debugPrint
(
"Bind error %s
\n
"
,
uv_err_name
(
r
));
removeListeningPipe
(
0
);
removeListeningPipe
(
0
);
return
1
;
return
1
;
}
}
if
((
r
=
uv_listen
((
uv_stream_t
*
)
&
server
,
128
,
udfdOnNewConnection
)))
{
if
((
r
=
uv_listen
((
uv_stream_t
*
)
&
server
,
128
,
udfdOnNewConnection
)))
{
debugPrint
(
stderr
,
"Listen error %s
\n
"
,
uv_err_name
(
r
));
debugPrint
(
"Listen error %s
"
,
uv_err_name
(
r
));
return
2
;
return
2
;
}
}
uv_run
(
loop
,
UV_RUN_DEFAULT
);
uv_run
(
loop
,
UV_RUN_DEFAULT
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录