Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.03.2023, 21:31   #1
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию WIN64 SOCKET_ERROR =0×00000000FFFFFFFF

Приветствую. Пытаюсь освоить сетевое программирование на FASM64. В includ-ах нет WINSOCK64, только WINSOCK32. В WINSOCK32 нет константы SOCKET_ERROR. В интернете нашел что равна -1, а в отладчике = 00000000FFFFFFFF.
Подскажите почему в Win64 SOCKET_ERROR =0×00000000FFFFFFFF?
mikado3333 вне форума Ответить с цитированием
Старый 12.03.2023, 21:45   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Может потому, что возвращаемое значение из функции 32-битное.
Вы бы хотя бы кусок кода показали где вы это поучаете. Хотя подозреваю, что речь о функции socket.
macomics вне форума Ответить с цитированием
Старый 12.03.2023, 21:51   #3
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

Виноват, ступил. Код клиента. Ошибка при send.
Код:
format PE64 console
entry start
include 'win64w.inc'
include 'encoding\UTF8.INC' 

macro block {}
macro endblock {}


section '.data' data readable writeable

 hInput 	dq 0
 hOutput 	dq 0
 hSocket 	dq 0

 nCount 	dq 0
 nlength 	dq sizeof.sockaddr_in
 
 sPoint		POINTS 0
 sWsa		WSADATA 
 sSockAddr 	sockaddr_in AF_INET,$5000,?,?
 
 szLabel 	du 'Клиент XXXXX',0
 szTxt0 	du 'Клиент XXXXX ver. 0.1',10,13,0
 szTxt1 	du 'WSAStartup ........OK',10,13,0
 szTxt2 	du 'socket ............OK',10,13,0
 szTxt3 	du '%u',10,13,0
 szTxt4 	db '127.0.0.1'
 
 aBuffer 	rb 1048576
 align 16


section '.code' code readable executable

start:
	sub 	rsp, 8*5
		
	invoke	SetConsoleTitleW, szLabel																; Текст Заголовка
	cmp		rax, 0
	jz		error
	
    invoke	GetStdHandle, STD_OUTPUT_HANDLE															; Дескриптор для вывода в консоль
	cmp		rax, INVALID_HANDLE_VALUE
	jz		error
    mov		[hOutput], rax
	
    invoke	GetStdHandle, STD_INPUT_HANDLE															; Дескриптор для чтения из консоли
	cmp		rax, INVALID_HANDLE_VALUE
	jz		error
    mov		[hInput], rax
	
	invoke	SetConsoleTextAttribute, [hOutput], 10
    invoke	WriteConsoleW, [hOutput], szTxt0, 23, nCount, 0

    invoke 	WSAStartup, 202h, sWsa																	; Активация winSock.dll
	cmp		rax, 0
	jnz		errorWSA
	invoke	WriteConsoleW, [hOutput], szTxt1, 23, nCount, 0
	
	invoke 	socket, AF_INET, SOCK_STREAM, 0															; Создаем сокет 
	cmp		rax, -1
	jz		errorWSA
	mov		[hSocket], rax

	invoke 	inet_addr, szTxt4
	mov 	[sSockAddr.sin_addr],eax
	; invoke 	htons,80
	; mov 	[sSockAddr.sin_port],ax
	
	invoke  connect,[hSocket], sSockAddr,sizeof.sockaddr_in
	cmp		rax, -1
	jz		errorWSA
	
	invoke	send, [hSocket],  szTxt2 , 23, 0
	cmp		rax, -1h
	jz		errorWSA
	invoke  wsprintfW,aBuffer, szTxt3, rax
	invoke	WriteConsoleW, [hOutput], aBuffer, 12, nCount, 0 
	invoke	WriteConsoleW, [hOutput], szTxt2, 23, nCount, 0 
	
	invoke 	Sleep, 10000
	jmp		exit




error:
	invoke	GetLastError
	;invoke  showErrorText, rax
	jmp		exit
	
errorWSA:	
	invoke	WSAGetLastError
	;invoke  showErrorText, rax
	
exit:
	invoke 	closesocket, [hSocket]
	invoke 	WSACleanup
	invoke	ExitProcess, 0

section '.idata' import data readable writeable 

	library	kernel32, 'kernel32.dll',\
			user32,	  'user32.dll',\
			wsock32,  'wsock32.dll'


include 'api\kernel32.inc'
include 'api\user32.inc'
include 'api\wsock32.inc'
mikado3333 вне форума Ответить с цитированием
Старый 12.03.2023, 22:17   #4
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

https://learn.microsoft.com/en-us/wi...-winsock2-send

Вот я об этом и говорил. Прототип функции указывает, что она возвращает 32-битное значение
macomics вне форума Ответить с цитированием
Старый 12.03.2023, 22:41   #5
mikado3333
Пользователь
 
Регистрация: 25.09.2013
Сообщений: 58
По умолчанию

macomics, благодарю за помощь.

Другим (Как я) на заметку:

bool, char, char8_t, unsigned char, signed char, __int8 1 байт
char16_t, __int16, short, unsigned short, wchar_t, __wchar_t 2 байта
char32_t, float, __int32, int, unsigned int, long, unsigned long 4 байта
double, __int64, long double, long long, unsigned long long 8 байт

https://learn.microsoft.com/ru-ru/cp...?view=msvc-160
mikado3333 вне форума Ответить с цитированием
Старый 12.03.2023, 23:10   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Странно. Я всегда думал, что long double 10 байт. Надо будет проверить.

ADD: g++ использует 80-битные значения для long double
Изображения
Тип файла: png Screenshot_20230312_231410.png (26.1 Кб, 28 просмотров)
Тип файла: png Screenshot_20230312_231452.png (7.8 Кб, 28 просмотров)

Последний раз редактировалось macomics; 12.03.2023 в 23:16.
macomics вне форума Ответить с цитированием
Старый 13.03.2023, 00:32   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Странно. Я всегда думал, что long double 10 байт. Надо будет проверить.
Цитата:
long double - extended precision floating-point type. Matches IEEE-754 binary128 format if supported, otherwise matches IEEE-754 binary64-extended format if supported, otherwise matches some non-IEEE-754 extended floating-point format as long as its precision is better than binary64 and range is at least as good as binary64, otherwise matches IEEE-754 binary64 format.
binary128 format is used by some HP-UX, SPARC, MIPS, ARM64, and z/OS implementations.
The most well known IEEE-754 binary64-extended format is 80-bit x87 extended precision format. It is used by many x86 and x86-64 implementations (a notable exception is MSVC, which implements long double in the same format as double, i.e. binary64).
Ждем С++23 и фиксированные типы для флотов.
p51x на форуме Ответить с цитированием
Старый 13.03.2023, 01:38   #8
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

То есть это тараканы из мелкософта.
macomics вне форума Ответить с цитированием
Старый 13.03.2023, 08:34   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Почему тараканы? Стандартом разрешено... А так там у в многих x86 тараканы в виде binary80.
p51x на форуме Ответить с цитированием
Старый 13.03.2023, 12:17   #10
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Почему тараканы? Стандартом разрешено... А так там у в многих x86 тараканы в виде binary80.
Только binary80 это уже тараканы разработчиков процессоров т.к. binary80 это как раз аппаратный тип у x87.

Но в стандарте написано: otherwise matches some non-IEEE-754 extended floating-point format as long as its precision is better than binary64 and range is at least as good as binary64
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA и Win64 Aent Microsoft Office Excel 4 22.11.2014 11:30
Win32/Win64 - драйвера и программы xe3 Win Api 10 02.06.2014 14:07
От Win32 к Win64 shuaal Visual C++ 0 25.10.2010 13:30
Lazarus компилит приложения для Win64? Marsel737 Lazarus, Free Pascal, CodeTyphon 3 18.10.2010 02:30
Windows 7 win64 и SQL Dux SQL, базы данных 0 17.03.2010 23:52