 |

25.01.2022, 20:08
|
|
Постоянный
Регистрация: 04.06.2020
Сообщений: 620
С нами:
3127813
Репутация:
133
|
|
Есть функция инициализации объекта сокета:
C++:
Код:
static
void
init_socket_instance
(
lua_State
*
L
,
SOCKETH_T hSocket
,
int
family
,
int
type
,
int
protocol
)
{
if
(
hSocket
==
INVALID_SOCKET
)
luaL_error
(
L
,
"an error occured while creating socket"
)
;
SocketInfo iSocket
;
ZeroMemory
(
&
iSocket
,
sizeof
(
iSocket
)
)
;
iSocket
.
hSocket
=
hSocket
;
iSocket
.
family
=
family
;
iSocket
.
type
=
type
;
iSocket
.
protocol
=
protocol
;
lua_pushlightuserdata
(
L
,
&
iSocket
)
;
// Push SocketInfo
luaL_newmetatable
(
L
,
SOCKET_DATA_NAME
)
;
// Create new metatable for SocketInfo(socket_data)
lua_getglobal
(
L
,
"socket"
)
;
// Get Global Socket Table(socket)
lua_setfield
(
L
,
-
2
,
"__index"
)
;
// socket_data.__index = socket
lua_setmetatable
(
L
,
-
2
)
;
// Set metatable of SocketInfo to socket_data
}
Свою задачу выполняет на отлично, но есть проблемка:
В другой функции
(ниже), при получении этой структуры, данные в ней 'повреждаются', и вместо handler'а сокета, там рандомное число.
Возможно, поможет: Значения hSocket при одном из запусков(естественно, hSocket меняется)
hSocket при инициализации = 248
hSocket при получении в функции
= 1975321384
C++:
Код:
static
SocketInfo
*
check_socket_data
(
lua_State
*
L
)
{
return
(
SocketInfo
*
)
luaL_checkudata
(
L
,
1
,
SOCKET_DATA_NAME
)
;
}
Сообщение от HarukiSt
Есть функция инициализации объекта сокета:
C++:
Код:
static
void
init_socket_instance
(
lua_State
*
L
,
SOCKETH_T hSocket
,
int
family
,
int
type
,
int
protocol
)
{
if
(
hSocket
==
INVALID_SOCKET
)
luaL_error
(
L
,
"an error occured while creating socket"
)
;
SocketInfo iSocket
;
ZeroMemory
(
&
iSocket
,
sizeof
(
iSocket
)
)
;
iSocket
.
hSocket
=
hSocket
;
iSocket
.
family
=
family
;
iSocket
.
type
=
type
;
iSocket
.
protocol
=
protocol
;
lua_pushlightuserdata
(
L
,
&
iSocket
)
;
// Push SocketInfo
luaL_newmetatable
(
L
,
SOCKET_DATA_NAME
)
;
// Create new metatable for SocketInfo(socket_data)
lua_getglobal
(
L
,
"socket"
)
;
// Get Global Socket Table(socket)
lua_setfield
(
L
,
-
2
,
"__index"
)
;
// socket_data.__index = socket
lua_setmetatable
(
L
,
-
2
)
;
// Set metatable of SocketInfo to socket_data
}
Свою задачу выполняет на отлично, но есть проблемка:
В другой функции
(ниже), при получении этой структуры, данные в ней 'повреждаются', и вместо handler'а сокета, там рандомное число.
Возможно, поможет: Значения hSocket при одном из запусков(естественно, hSocket меняется)
hSocket при инициализации = 248
hSocket при получении в функции
= 1975321384
C++:
Код:
static
SocketInfo
*
check_socket_data
(
lua_State
*
L
)
{
return
(
SocketInfo
*
)
luaL_checkudata
(
L
,
1
,
SOCKET_DATA_NAME
)
;
}
Проблему решил самолично
Решение:
Выделять память malloc'ом
|
|
|
|
 |
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|