Page 1 of 1
socket_process_end
Posted: Thu Sep 15, 2022 3:59 am
by Kreoton
В процессе портирования сетевой подсистемы в Miraculix OS, возникло пару вопросов.
Почему не используется процедура закрытия сокетов, при завершении процесса - socket_process_end?
Кроме того, обратил внимание, что поиск номера свободного сокета в socket_alloc, идет не с начала, а начиная с последнего.
Re: socket_process_end
Posted: Thu Sep 15, 2022 8:45 am
by turbocat
Кста почему исходики ОС закрыты? А ещё я не пойму какая лицензия у проекта.
Re: socket_process_end
Posted: Thu Sep 15, 2022 9:09 am
by Kreoton
Буду открывать по мере готовности. На данный момент открыл исходники новых программ на С (ipconfig, ping, taskmgr, wget, http-server), mx32.asm (ring3 API), и исходный код ядра kernel.asm
Выложил на свой сайт и на github
На счет лицензии еще подумаю.
Re: socket_process_end
Posted: Thu Sep 15, 2022 10:19 am
by turbocat
Касательно сетевого стека сказать не могу. Он не полностью реализован. Да и работает тоже не очень. Вы не думали портировать lwIP к себе?
Re: socket_process_end
Posted: Thu Sep 15, 2022 10:49 am
by Kreoton
Я подумал проще портировать стек из KolibriOS, т.к тоже на FASM'e. На счет lwIP надо подумать.. В принципе, его можно дорабатывть по мере необходимости. Критичный для меня функционал я уже доработал.
И считаю, что его уже достаточно для создания сетевых приложений, например - мессенджера.
А касательно работы стека да... глюков к сожалению много... например, если в Колибри используется драйвер PCNET32, 10 мин пинга и стек подвисает. В Miraculix я исправил этот баг, добавив в нужном месте в icmp.inc освобождение буфера.
Re: socket_process_end
Posted: Thu Sep 15, 2022 11:50 am
by turbocat
А вы можете кинуть нам патч пожалуйста)
Re: socket_process_end
Posted: Thu Sep 15, 2022 5:02 pm
by rgimad
Офигеть, кто вернулся! Миракуликс жив, нифига себе!! Спустя столько лет
Re: socket_process_end
Posted: Fri Sep 16, 2022 12:36 am
by Kreoton
turbocat wrote: ↑Thu Sep 15, 2022 11:50 am
А вы можете кинуть нам патч пожалуйста)
Изменить в socket.inc, для того, чтобы отсчет пошел сначала.
Code: Select all
; в socket_alloc
mov edi, [last_socket_num]
; заменить на
mov edi, 0
Закрытие сокетов при завершении процесса:
Code: Select all
;
; Добавил в stack_init пепехват завершения процесса или потока. Таким же способом будут закрываться файлы и соединения Bluetooth.
;
mov eax, socket_process_end
call [HookTaskKill]
; добавить в socket.inc
; IN : EDX - Closing PID
socket_process_end:
pusha
pushf
cli
.socket_close_PID_start:
mov ebx, net_sockets
.next_socket:
mov ebx, [ebx + SOCKET.NextPtr]
cmp ebx, 0
je .last_socket
cmp [ebx + SOCKET.PID],edx
je .close_socket_handle_of_PID
cmp [ebx + SOCKET.TID],edx
je .close_socket_handle_of_PID
jmp .next_socket
.close_socket_handle_of_PID:
pusha
mov ecx,[ebx + SOCKET.Number]
call socket_close
popa
jmp .socket_close_PID_start
.last_socket:
popf
popa
ret
Re: socket_process_end
Posted: Sun Sep 10, 2023 3:40 pm
by Leency
И что? И всё?
Re: socket_process_end
Posted: Tue Sep 12, 2023 11:30 pm
by hidnplayr
The function was disabled because it resulted in deadlock under certain circumstances and whole design should be re-evaluated.
It could be that the proposed solution reduces the frequency, but I don't understand how it can resolve the issue completely.