1- المشكلة الأولى:
في هذا الملف :
// هذا صحيح ، لأن c-fd هو بالفعل مقبس fd.
--if (uv_poll_init (حلقة ، & p-> مقبض ، c-> fd)! = 0) {
++ if (uv_poll_init_socket (loop، & p-> handle، c-> fd)! = 0) {
إرجاع REDIS_ERR ؛
}
2.المشكلة الثانية
redisAsyncConnect -> ... -> _ redisContextConnectTcp:
في هذه الوظيفة ، (التقرير الأصلي "خطأ: setsockopt (TCP_NODELAY): خطأ في الإدخال / الإخراج")
إذا (حجب && redisSetBlocking (ج ، 1)! = REDIS_OK)
غوتو الخطأ
++ # ifndef _MSC_VER
++ النوم (0) ؛
++ # آخر
++ _sleep (0) ؛
++ # endif
إذا (redisSetTcpNoDelay (c)! = REDIS_OK)
غوتو الخطأ
يرجى تأكيده وإصلاحه.
مرحبًا @ xingyun86 ، هل يمكنك نشر هذا على أنه git
تصحيح يمكنني تطبيقه؟
مرحبًا @ xingyun86 ، هل يمكنك نشر هذا على أنه
git
تصحيح يمكنني تطبيقه؟
مرحبًا mnunberg ،mbitsnbites
ليس لدي جهاز يعمل بنظام Windows ولكن عند إلقاء نظرة على مستندات libuv ، يبدو أن هذا التغيير على المحولات / libuv.h قد يكون صحيحًا.
diff --git adapters/libuv.h adapters/libuv.h
index 39ef7cf..049096e 100644
--- adapters/libuv.h
+++ adapters/libuv.h
@@ -84,7 +84,6 @@ static void redisLibuvCleanup(void *privdata) {
uv_close((uv_handle_t*)&p->handle, on_close);
}
-
static int redisLibuvAttach(redisAsyncContext* ac, uv_loop_t* loop) {
redisContext *c = &(ac->c);
@@ -106,7 +105,7 @@ static int redisLibuvAttach(redisAsyncContext* ac, uv_loop_t* loop) {
memset(p, 0, sizeof(*p));
- if (uv_poll_init(loop, &p->handle, c->fd) != 0) {
+ if (uv_poll_init_socket(loop, &p->handle, c->fd) != 0) {
return REDIS_ERR;
}
القسم ذو الصلة:
int uv_poll_init_socket (uv_loop_t * loop ، uv_poll_t * handle ، uv_os_sock_t socket) ¶
قم بتهيئة المقبض باستخدام واصف مقبس. في نظام يونكس هذا مطابق لـ uv_poll_init (). على النوافذ يأخذ مقبض SOCKET.
و @ xingyun86 هل يمكن أن تشرح لماذا
diff --git net.c net.c
index e5f40b0..342d292 100644
--- net.c
+++ net.c
@@ -478,6 +478,13 @@ addrretry:
}
if (blocking && redisSetBlocking(c,1) != REDIS_OK)
goto error;
+
+#ifndef _MSC_VER
+ sleep(0);
+#else
+ _sleep(0);
+#endif // !_MSC_VER
+
مرحبًا mnunberg ،mbitsnbites
ليس لدي جهاز يعمل بنظام Windows ولكن عند إلقاء نظرة على مستندات libuv ، يبدو أن هذا التغيير على المحولات / libuv.h قد يكون صحيحًا.
diff --git adapters/libuv.h adapters/libuv.h index 39ef7cf..049096e 100644 --- adapters/libuv.h +++ adapters/libuv.h @@ -84,7 +84,6 @@ static void redisLibuvCleanup(void *privdata) { uv_close((uv_handle_t*)&p->handle, on_close); } - static int redisLibuvAttach(redisAsyncContext* ac, uv_loop_t* loop) { redisContext *c = &(ac->c); @@ -106,7 +105,7 @@ static int redisLibuvAttach(redisAsyncContext* ac, uv_loop_t* loop) { memset(p, 0, sizeof(*p)); - if (uv_poll_init(loop, &p->handle, c->fd) != 0) { + if (uv_poll_init_socket(loop, &p->handle, c->fd) != 0) { return REDIS_ERR; }
القسم ذو الصلة:
int uv_poll_init_socket (uv_loop_t * loop ، uv_poll_t * handle ، uv_os_sock_t socket) ¶
قم بتهيئة المقبض باستخدام واصف مقبس. في نظام يونكس هذا مطابق لـ uv_poll_init (). على النوافذ يأخذ مقبض SOCKET.و @ xingyun86 هل يمكن أن تشرح لماذا
diff --git net.c net.c index e5f40b0..342d292 100644 --- net.c +++ net.c @@ -478,6 +478,13 @@ addrretry: } if (blocking && redisSetBlocking(c,1) != REDIS_OK) goto error; + +#ifndef _MSC_VER + sleep(0); +#else + _sleep(0); +#endif // !_MSC_VER +
نعم ، أعتقد أنك محق بشأن وظيفة libuv init من مستنداتهم ، ليس لدي آلة Windows للتحقق منها. :ابتسامة:
////////////////////////////////////////////////////////////////////////////////////////////
diff --git net.c net.c
index e5f40b0..342d292 100644
--- net.c
+++ net.c
@@ -478,6 +478,13 @@ addrretry:
}
if (blocking && redisSetBlocking(c,1) != REDIS_OK)
goto error;
+
+#ifndef _MSC_VER
+ sleep(0);
+#else
+ _sleep(0);
+#endif // !_MSC_VER
+
////////////////////////////////////////////////////////////////////////////////////////////
هذا التعديل على لينكس لا يحتاج. التعديل الأخير هو:
////////////////////////////////////////////////////////////////////////////////////////////
diff --git net.c net.c
index e5f40b0..342d292 100644
--- net.c
+++ net.c
@@ -478,6 +478,13 @@ addrretry:
}
if (blocking && redisSetBlocking(c,1) != REDIS_OK)
goto error;
+
+#ifdef _MSC_VER
+ _sleep(0);
+#endif // !_MSC_VER
+
////////////////////////////////////////////////////////////////////////////////////////////
لقد اختبرت كلاً من Windows و Linux.
على الأقل قم بعمل PR من هذا قبل الدمج ، للحصول على اختبار Travis أولاً.
بالطبع. لقد قمت فقط بوضع علامة عليك لأنك ملتزم بالعديد من الالتزامات المستندة إلى Windows.
@ xingyun86 هل تمانع في إنشاء
بالطبع. لقد قمت فقط بوضع علامة عليك لأنك ملتزم بالعديد من الالتزامات المستندة إلى Windows.
@ xingyun86 هل تمانع في إنشاء
ماذا استطيع ان افعل؟ كيف افعلها؟
ما عليك سوى تقسيم الريبو ثم تنفيذ التغييرات التي تريدها وإرسال طلب سحب.
يسعدني القيام بذلك ولكن بعد ذلك لن تحصل على أي ائتمان (في سجل git). 😃
ما عليك سوى تقسيم الريبو ثم تنفيذ التغييرات التي تريدها وإرسال طلب سحب.
يسعدني القيام بذلك ولكن بعد ذلك لن تحصل على أي ائتمان (في سجل git). 😃
حسنًا ، لقد فعلتها. https://github.com/redis/hiredis/pull/736
إغلاق لصالح # 736